这篇文章给大家分享的是有关Angularjs怎么在跨域请求中传输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,这回就跟普通本域请求一样了。
感谢各位的阅读!关于“Angularjs怎么在跨域请求中传输Cookie”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。