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 相关文章推荐
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
layui表格内容溢出的解决方法
Sep 06 Javascript
小程序分享链接onShareAppMessage的具体用法
May 22 Javascript
Vue实现点击箭头上下移动效果
Jun 11 Javascript
vue-cli3中配置alias和打包加hash值操作
Sep 04 Javascript
vue router-link 默认a标签去除下划线的实现
Nov 06 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开发文件系统实例讲解
2006/10/09 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
详细解析Python当中的数据类型和变量
2015/04/25 Python
python字典快速保存于读取的方法
2018/03/23 Python
python设置环境变量的原因和方法
2019/06/24 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
师范毕业生求职自荐信
2013/09/25 职场文书
xxx同志考察材料
2014/02/07 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
安全标准化实施方案
2014/02/20 职场文书
课程改革实施方案
2014/03/16 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
节能标语大全
2014/06/21 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis