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 相关文章推荐
Maps Javascript
Jan 22 Javascript
基于jQuery的图片剪切插件
Aug 03 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
js简单实现调整网页字体大小的方法
Jul 23 Javascript
卸载安装Node.js与npm过程详解
Aug 15 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
Vue实现选择城市功能
May 27 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
JS实现求5的阶乘示例
Jan 21 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 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
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Javascript开发包大全整理
2006/12/22 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Python输出带颜色的字符串实例
2017/10/10 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
如何利用cmp命令比较文件
2013/09/23 面试题
告诉你怎样写创业计划书
2014/01/27 职场文书
小学社团活动总结
2014/06/27 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
学雷锋倡议书
2015/01/19 职场文书
趣味运动会开幕词
2015/01/28 职场文书
教师个人年终总结
2015/02/11 职场文书