js-跨域源资源共享(CORS)
### 一. CORS(Cross-Origin Resource Sharing,跨域源资源共享)
基本思想:使用自定义HTTP头部让浏览器与服务器进行沟通
发送请求时,需附加一个Origin头部
eg: Origin: http://www.xxx.net
如果服务认为这个请求可以接受,就在Access-Control-Allow-Origin投不中回发相同的源信息
Access-Control-Allow-Origin: http://www.xxx.net
1) IE对CORS的实现
XDR(XDomainRequest),这个对象与XHR类似
1.1) 与XHR区别:
cookie不会随请求发送,也不会随响应返回
只能设置请求头部信息中的Content-Type字段
不能访问响应头部信息
只支持GET和POST请求
该对象的创建与发送请求的方法与XHR相似,但open()方法只含两个参数(请求类型,URL)
**所有的XDR请求都是异步执行的**
eg: var xdr = new XDomainRequest();
xdr.onload = function(){
alert(xdr.responseText);
}
xdr.open("get",http://www.xxx.com/page/*);
xdr.send(null)
在接收到响应后,你只能访问响应的原始文本;没有办法确定响应的状态代码,只要成功就会触发load事件,如果失败触发error事件
XDR提供了contentType属性,用来表示发送数据的格式,定义在open及send方法之间
2.)其他浏览器对CORS的实现
其他浏览器通过XMLHttpRequest对象实现对CORS的原生支持
请求位于另外一个域中的资源,使用标准 的XHR对象并在open中的URL中传入绝对URL即可
eg: xhr.open("GET","http://www.somewhere.com/page/",true)
3.) 带凭据的请求
默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据
XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。
此外,这个指示也会被用做响应中cookies 被忽视的标示。默认值是false。
如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials 为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问
4.) 跨浏览器的CORS
检测XHR是否支持CORS的最简单方法,就是检查是否存在withCredentials属性。再结合检测XDomainRequest对象是否存在
eg:
function createCORSRequest(method,url){
var xhr = new XMLHttpRequest();
if("withCredentials" in xhr){
xhr.open(method,url,true)
}else if(typeof XDomainRequest != "undefined"){ // IE
xhr = new XDomainRequest
}else{
xhr = null
}
return xhr;
}
var request = createCORSRequset("get","http://somewhere-else.com/page/")
if(request){
request.onload = function(){
alert(request.responseText)
}
request.send()
}
js-跨域源资源共享(CORS)的更多相关文章
- Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持
Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1. 设置 document.domain为一致 推荐1 2. Apache 反向代理 推荐1 ...
- JS跨域:jsonp、跨域资源共享、iframe+window.name
JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...
- 前端Js跨域方法汇总—剪不断,理还乱,是跨域
1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...
- ajax跨域请求解决方案 CORS和JSONP
什么是跨域: 只要协议.域名.端口有任何一个不同,都会被当成不同的域.而由于浏览器的同源策略(同源策略:域名.协议.端口均相同),浏览器之间要隔离不同域的内容,禁止互相操作,不能执行其他网站的js.所 ...
- js跨域问题
跨域概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 跨域的主要原因是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容). 常用的跨域解决方案: 1.J ...
- 【前端】【转】JS跨域问题总结
详情见原博客:详解js跨域问题 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 跨域资源共享(CORS) CORS(Cross-Origin Resource Sharing)跨域资源 ...
- js跨域问题解决方案
跨域:当协议.域名.端口号任何一个不相同时,叫称为跨域. HTML5 CORS(cross-origin-resource-sharing)跨域资源共享: 原理:当需要访问跨域的资源时,可以通 ...
- 【fetch跨域请求】cors
当使用fetch 发起跨域请求时,CORS(跨域资源共享Cross-origin resource sharing) 请求fetch const body = {name:"Good boy ...
- c# WebApi之解决跨域问题:Cors
什么是跨域问题 出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容.由于这个原因,我们不同站点之间的数据访问会被拒绝. Cors解决跨域问 ...
随机推荐
- linux上部署SpringBoot项目及遇到的问题
打开sftp步骤, 在显示的已连接的窗口上右键, 选择connect SFTP Session就可以打开文件上传的窗口 从windows上传文件到linux, 首先linux需要先切换到想要保存文件的 ...
- Java高级教程
目录 1.Java面向对象方法 1.1. 创建类和对象的方法 1.2. this的使用 1.3. 静态域和静态方法 1.3.1. 静态域:属于类的级别 1.3.2.静态常量 1.3.3 静态方法 1. ...
- formbuild拖拽表单设计器
formbuild拖拽表单设计器 表单设计器适用于OA系统.问卷调查系统.考试系统等系统,具体使用请前至官网API请点击 formbuild拖拽表单设计器 formbuild迭代几个功 ...
- 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回
今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...
- Mysql的用户管理
- python写测试接口
https://www.cnblogs.com/liuyl-2017/p/7815950.html
- Rancher3----安装部署rancher
官方说:Rancher是使用一系列的Docker容器进行部署的.运行Rancher跟启动两个容器一样简单.一个容器作为管理服务器部署,另外一个作为集群节点的Agent部署 官方的意思是:学好docke ...
- linux命令中的“<”和“|”是什么意思?
”<” 表示的是输入重定向的意思,就是把<后面跟的文件取代键盘作为新的输入设备.”| ”则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边. cat file.json | ...
- CSAPP:第三章程序的机器级表示2
CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作 如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...
- mongodb创建用户(转发)
参考文档: https://www.cnblogs.com/itxiongwei/p/5520863.html MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访 ...