Angularjs之如何在跨域请求中传输Cookie的方法
程序员文章站
2022-03-22 08:01:23
一般情况我们在使用webapi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可。
如果这些get或post请求不需要传递cookie数据的话,就没什...
一般情况我们在使用webapi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可。
如果这些get或post请求不需要传递cookie数据的话,就没什么问题了,但如果需要,那么会发现 虽然已经处理了跨域请求的问题,但后台始终无法获取到cookie。
跨域传输cookie是需要后台和前台同时做相关处理才能解决的。
就好比一个握手会话,前台先表示,我的跨域请求是带有cookie的;请求到了服务端,服务端表示可以接收跨域cookie,成交(开始重新带着cookie发起请求)
后台代码
response.headers.add("access-control-allow-credentials", "true");
前台代码
$http.post("http://a.domain.com/api/product", { productid: 3 }, { withcredentials: true, params: { name: "ray" }, headers: {'authorization':"这个不重要"} }).success(function (data) { //todo });
这个是在单独的请求中设置,如果要在所有的请求中都应用该设置则要使用 $httpprovider
angular.module("app").config(function ($httpprovider) { $httpprovider.defaults.withcredentials = true; $httpprovider.defaults.headers.common['authorization'] = "89757"; })
如果使用jquery,则是这样子的
$.ajax({ type: "post", url: "http://a.domain.com/api/product", xhrfields: { withcredentials: true }, success: function (data) { console.log(data) }, error: function (data) { console.error(data) } })
撇开cookie跨域传输的问题,angularjs的跨域post请求与jquery有些区别:
jquery跨域与本域的区别仅仅是请求头信息的变化;
angularjs跨域后,会变成两次请求,第一次的request method是options,这里有个概念叫preflight,这里不谈。
第一次请求到服务器后,会针对请求的下面三项进行赋值
- access-control-allow-origin
- access-control-allow-methods
- access-control-allow-headers"
浏览器接收到返回信息后,会再次发送请求,这次的request method是post,这回就跟普通本域请求一样了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。