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 相关文章推荐
window.onload 加载完毕的问题及解决方案(上)
Jul 09 Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
Aug 19 Javascript
js实现表单及时验证功能 用户信息立即验证
Sep 13 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
Mar 27 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
在Vue中使用HOC模式的实现
Aug 23 Javascript
一起来了解一下JavaScript的预编译(小结)
Mar 01 Javascript
如何理解Vue简单状态管理之store模式
May 15 Vue.js
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和ACCESS写聊天室(一)
2006/10/09 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
ECMAScript6--解构
2017/03/30 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
js实现网页随机验证码
2020/10/19 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Python pip使用超时问题解决方案
2020/08/03 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
新护士岗前培训制度
2014/02/02 职场文书
艺术教育实施方案
2014/05/03 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
简短清晨问候语
2015/11/10 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
mysql查询结果实现多列拼接查询
2022/04/03 MySQL