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获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
Jquery常用的方法汇总
Sep 01 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
Dec 15 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
简单通过settimeout看javascript的运行机制
May 10 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 Javascript
JS typeof fn === 'function' && fn()详解
Aug 22 Javascript
微信小程序实现点赞业务
Feb 10 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
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
PHP之短标签开启设置
2013/06/17 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
浅谈vuepress 踩坑记
2018/04/18 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python 备份程序代码实现
2017/03/06 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
六一节目主持词
2014/04/01 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
机械系毕业生求职信
2014/05/28 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
六年级小学生评语
2014/12/26 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python