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 相关文章推荐
jquery 元素相对定位代码
Oct 15 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
基于javascript实现简单计算器功能
Jan 03 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
Node.js API详解之 readline模块用法详解
May 22 Javascript
ES11屡试不爽的新特性,你用上了几个
Oct 21 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 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中exec函数和shell_exec函数的区别
2014/08/20 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
php中上传文件的的解决方案
2018/09/25 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
会计电算化专业毕业生自荐信
2013/12/20 职场文书
音乐专业自荐信
2014/02/07 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
详解NodeJS模块化
2021/06/15 NodeJs