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与DropDownList 区别分析
Jan 01 Javascript
jquery中获取元素的几种方式小结
Jul 05 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
Javascript操作cookie的函数代码
Oct 03 Javascript
jQuery 跨域访问解决原理案例详解
Jul 09 Javascript
Js获取当前日期时间及格式化代码
Sep 17 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
Nov 13 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
JavaScript 动态三角函数实例详解
Jan 08 Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
vue中使用vue-pdf的方法详解
Sep 05 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
PHP5 安装方法
2007/01/15 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
vue写一个组件
2018/04/09 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
js实现数字滚动特效
2019/12/16 Javascript
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
Python爬虫与反爬虫大战
2020/07/30 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
电子商务求职信
2014/06/15 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
毕业实习证明范本
2015/06/16 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android