我就空话不多说了,各人照旧直接看代码吧~
$.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/template/testPost", contentType: "application/json;charset=utf-8", data :JSON.stringify({"bodyName":"sdfsdf","date":"2017-11-28 07:34:01","price": 10.5,"tbId": 1}), dataType: "json", beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("token", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxOD....."); }, success: function (data) { alert(data); },error:function(error){ console.log(error); } });
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("token", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxOD....."); },
个中,token是处事端自界说的header参数
增补常识:ajax请求携带cookie和自界说请求头header(跨域和同域)
ajax请求携带cookie、自界说header总结:
错误:
1.ajax请求时是不会自动带上cookie的,要是想让他带上的话,必需配置withCredential为true。
正确:
1.ajax同域请求下,ajax会自动带上同源的cookie;
2.ajax同域请求下,ajax添加自界说请求头(或原装)header,前端、靠山不需要增加任何设置,
而且不会因为增加自界说请求头header,而引起预查抄请求(options);
3.ajax跨域请求下,假如不需要携带cookie、请求头header,只需要在靠山设置相应参数即可;
靠山参数:
(1).Access-Control-Allow-Origin:配置答允跨域的设置, 响应头指定了该响应的资源是否被答允与给定的origin共享;
4.ajax跨域请求下,ajax不会自动携带同源的cookie,需要通过前端设置相应参数才可以跨域携带同源cookie,靠山设置相应参数才可以跨域返回同源cookie;
前端参数:
withCredentials: true(发送Ajax时,Request header中会带上Cookie信息)
靠山参数:
(1).Access-Control-Allow-Origin:配置答允跨域的设置, 响应头指定了该响应的资源是否被答允与给定的origin共享;
出格说明:设置了Access-Control-Allow-Credentials:true则不能把Access-Control-Allow-Origin配置为通配符*;
(2).Access-Control-Allow-Credentials:响应头暗示是否可以将对请求的响应袒露给页面(cookie)。返回true则可以,其他值均不行以。
5.ajax请求任何时候都不会带上差异源的cookie(Cookie遵循同源计策);
6.ajax跨域请求下,ajax添加自界说可能原装的请求头,请求会发送两次,第一次预查抄请求,第二次正常请求,具体描写:
post(或GET)跨域请求时,分为简朴请求和巨大请求,跨域携带自界说可能原装请求头头时是巨大请求。
巨大请求会先发送一个method 为option的请求,目标是试探处事器是否接管提倡的请求. 假如处事器说可以,再举办post(或GET)请求。
对付java靠山web应用,跨域需要添加一个过滤器(过滤器详见下面案例代码),这个过滤器做的事就是,加了几个http header在返回中,
Access-Control-Allow-Origin 我能接管的跨域请求来历,设置主机名
Access-Control-Allow-Headers 暗示能接管的http头部,别忘了插手你本身发现缔造的头部
Access-Control-Allow-Methods 暗示能接管的http mothed ,横竖就那几种,全写上也无妨,猥琐点就只写 post, options
假如是OPTION返回空,配置返回码为202,202暗示通过。
需要前端设置相应参数才可以跨域携带请求头,靠山设置相应参数举办跨域携带请求头;
前端参数:
crossDomain:true(发送Ajax时,Request header 中会包括跨域的特别信息,但不会含cookie(浸染不明,不会影响请求头的携带))
靠山参数(设置预查抄过滤器):
(1)Access-Control-Allow-Origin:配置答允跨域的设置, 响应头指定了该响应的资源是否被答允与给定的origin共享;
(2)Access-Control-Allow-Credentials:响应头暗示是否可以将对请求的响应袒露给页面(cookie)。返回true则可以,其他值均不行以;
(3)Access-Control-Allow-Headers:用于预检请求中,列出了将会在正式请求的 Access-Control-Request-Headers 字段中呈现的首部信息。(自界说请求头);
(4)Access-Control-Allow-Methods:在对预检请求的应答中明晰了客户端所要会见的资源答允利用的要领或要领列表;
亲测小结论:
1.ajax跨域请求下,靠山不设置跨域Access-Control-Allow-Origin,同样可以或许执行靠山要领,可是无法执行ajax的success的要领,节制台报跨域错误;
2.ajax跨域请求下,前端设置withCredentials: false,同样可以或许执行靠山要领,可是无法携带同源cookie,靠山无法获取;