解决ajax jsonp跨域请求时cookie的问题

我们知道有些场景让我们不得不跨域请求对方的http api .  我们知道ajax不仅仅能访问同域的资源,也是可以跨域请求的,也就是jsonp请求.  

我这边申请一点,本人其实不怎么喜欢使用jsonp,因为对端http api会因为各种情况会出现异常,这些异常丢给后端去做反而更加的合理。  我一般会丢给后端去转发。


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/2016/02/29/%E8%A7%A3%E5%86%B3ajax-jsonp%E8%B7%A8%E5%9F%9F%E8%AF%B7%E6%B1%82%E6%97%B6cookie%E7%9A%84%E9%97%AE%E9%A2%98/

咱们继续说跨域的事情。  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


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注