我们知道有些场景让我们不得不跨域请求对方的http api . 我们知道ajax不仅仅能访问同域的资源,也是可以跨域请求的,也就是jsonp请求.
我这边申请一点,本人其实不怎么喜欢使用jsonp,因为对端http api会因为各种情况会出现异常,这些异常丢给后端去做反而更加的合理。 我一般会丢给后端去转发。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。
咱们继续说跨域的事情。 jsonp虽然是可以访问外域,但是请求默认不发送cookie信息,如果需要cookie,需要手动指定。
标准的CORS请求不对cookies做任何事情,既不发送也不改变。如果希望改变这一情况,就需要将withCredentials设置为true。
xhr.withCredentials = true;
这单单客户端的配置是不行的,服务端在处理这一请求时,也需要将Access-Control-Allow-Credentials设置为true。
为什么服务端也需要?
如果没有返回Access-Control-Allow-Credentials: true的响应头,那么浏览器将不会把响应结果传递给发出请求的脚步程序,以保证信息的安全。
下面是Jquery ajax携带cookie跨域请求的例子.
Jquery的Ajax请求,设置跨域附带详细参数
我们需要服务端支持相应的header
header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Origin: http://xiaorui.cc");
下面是详细的response头部信息.
#xiaorui.cc HTTP/1.1 200 OK Server: Nginx Access-Control-Allow-Origin: * Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: application/json
…