Angularjs之如何在跨域请求中传输Cookie的方法


Posted in Javascript onJune 01, 2018

一般情况我们在使用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,这里不谈。

第一次请求到服务器后,会针对请求的下面三项进行赋值

  1. Access-Control-Allow-Origin
  2. Access-Control-Allow-Methods
  3. Access-Control-Allow-Headers"

浏览器接收到返回信息后,会再次发送请求,这次的Request Method是POST,这回就跟普通本域请求一样了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript深入理解js闭包
Jul 03 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
Jul 15 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
Bootstrap 源代码分析(未完待续)
Aug 17 Javascript
关于使用js算总价的问题
Jun 23 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
js事件触发操作实例分析
Jun 21 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 Javascript
React 使用browserHistory项目访问404问题解决
Jun 01 #Javascript
详解vue-router 命名路由和命名视图
Jun 01 #Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 #Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 #jQuery
微信小程序登录换取token的教程
May 31 #Javascript
Rollup处理并打包JS文件项目实例代码
May 31 #Javascript
手把手教你vue-cli单页到多页应用的方法
May 31 #Javascript
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php目录管理函数小结
2008/09/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
讲解Python中的递归函数
2015/04/27 Python
Python多线程下载文件的方法
2015/07/10 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
学雷锋志愿者活动方案
2014/08/21 职场文书
2015年维修工作总结
2015/04/25 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
大学新生入学感想
2015/08/07 职场文书