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 相关文章推荐
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
关于定制FileField中的上传文件名称问题
Aug 22 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
vue项目移动端实现ip输入框问题
Mar 19 Javascript
实用的Vue开发技巧
May 30 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
CI框架常用函数封装实例
2016/11/21 PHP
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python 编写简单网页服务器的实例
2018/06/01 Python
python学习开发mock接口
2019/04/28 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
高山背包:High Sierra
2017/11/23 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
企业厂务公开实施方案
2014/03/26 职场文书
实习护士自荐信
2014/06/21 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
大学生入党群众意见书
2015/06/02 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript