WEB跨域资源共享:Cross-origin Resource Sharing(CORS)
- 跨域资源共享(CORS):浏览器同源策略中的同源指协议+域名+端口三者完全一致,其中任何一个不同即为跨域
1. 浏览器同源策略是隔离潜在恶意文件的安全机制,限制信息传递和使用的边界,不是信息的保密机制。<img><script><link>以及表单提交都可实现跨域请求,但可能会不同程度受同源策略的限制,因浏览器不同而异;
2. 跨域资源共享(CORS)是一个W3C标准,是在客户端和服务端同时遵循的情况下执行的,整个CORS通信过程,都是浏览器自动完成,在编码上与同源资源共享并无不同(CORS交互中使用WithCredentials除外);
3. 如果客户端不支持跨域资源共享(CORS),则信息的传递和使用将可能受同源策略限制,但服务端返回的任然是正常的HTTP响应;
4. IE未将端口号加入到同源策略的组成部分之中,Chrome 和 Firefox不允许从 HTTPS 的域跨域访问 HTTP。
下表给出了相对http://store.company.com/dir/page.html同源检测的示例:
URL 结果 原因 http://store.company.com/dir2/other.html成功 http://store.company.com/dir/inner/another.html成功 https://store.company.com/secure.html失败 不同协议 ( https和http ) http://store.company.com:81/dir/etc.html失败 不同端口 ( 81和80) http://news.company.com/dir/other.html失败 不同域名 ( news和store ) - 规避浏览器同源策略:以下列举了一些常见的可用方法
1. document.domain:不同子域下通过设置document.domain为相同的父级域来共享cookie 和 DOM (iframe)
document.domain = "company.com:8080"; 2. 片段识别符(fragment identifier):在使用iframe场景中,父子页通过URL #后的fragment来跨域传递数据
window.onhashchange = function () {
var message = window.location.hash;
// ...
} 3. window.name:无论是否同源,只要在同一个窗口里,前一个网页设置了这个属性,后一个网页可以读取它。window.name容量很大,可以放置非常长的字符串
var data = document.getElementById('myIframe').contentWindow.name; 4. window.postMessage(跨文档通信Cross-document Messaging):这是HTML5新增的API
var popup = window.open('http://bbb.com', 'title');
popup.postMessage('Hello World!', 'http://bbb.com'); 5. jsonp:最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小; 6. WebSocket:它使用ws://(非加密)和wss://(加密)作为协议前缀。该协议不支持同源政策,只要服务器支持,就可以通过它进行跨源通信; 7. Proxy Server:在本域之内增加Proxy Server节点负责域外数据的访问代理 8. CORS:此处不再赘述 跨域资源共享(CORS)请求:通常CORS请求可分为两类,一类是简单请求,另一类则是预检请求。无论何种请求类型,只要服务端响应中未包含正确的首部如Access-Control-Allow-Origin: http://foo.example等,浏览器将报告错误。
简单请求:简单请求与普通请求相比,多了请求首部字段Origin,形如Origin: http://foo.example,服务端响应时则多了响应首部字段Access-Control-Allow-Origin,形如Access-Control-Allow-Origin: http://foo.example 或者 *。简单请求须满足所有下述条件:
- 使用下列方法之一:
GETHEADPOSTContent-Type:仅POST方法的Content-Type值等于下列之一才算作简单请求:text/plainmultipart/form-dataapplication/x-www-form-urlencoded
- Fetch 规范定义了对 CORS 安全的首部字段集合,不得人为设置该集合之外的其他首部字段。该集合为:
AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-WidthWidth
预检请求:需预检的请求必须首先使用
OPTIONS方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求,如果服务端同意,再发送实际请求,这样可以避免跨域请求对服务器的用户数据产生未预期的影响。预检请求须满足所有下述条件:- 使用了下面任一 HTTP 方法:
PUTDELETECONNECTOPTIONSTRACEPATCH
- 人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。该集合为:
AcceptAccept-LanguageContent-LanguageContent-Type(but note the additional requirements below)DPRDownlinkSave-DataViewport-WidthWidth
Content-Type的值不属于下列之一:application/x-www-form-urlencodedmultipart/form-datatext/plain

- 使用下列方法之一:
- 跨域资源共享(CORS)附带身份凭证:默认情况下CORS不会在请求中附带 HTTP cookies 和 HTTP 认证信息,故需要将 withCredentials 标志设置为 true,如下
var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/'; function callOtherDomain(){
if(invocation) {
invocation.open('GET', url, true);
invocation.withCredentials = true;
invocation.onreadystatechange = handler;
invocation.send();
}
}但是,如果服务器端的响应中未携带
Access-Control-Allow-Credentials: true 或者Access-Control-Allow-Origin: *,浏览器将不会把响应内容返回给请求的发送者。
- 跨域资源共享(CORS) HTTP首部:CORS所涉及的首部包括响应首部和请求首部,这些首部大多包含同一前缀 “Access-Control-”,Origin除外。更多解释可参考HTTP访问控制(CORS)
- 参考:
1. 浏览器的同源策略
WEB跨域资源共享:Cross-origin Resource Sharing(CORS)的更多相关文章
- Ajax本地跨域问题 Cross origin requests are only supported for HTTP
问题:打开本地html文件时,报错如下 Cross origin requests are only supported for protocol schemes: http, data,chrome ...
- Node.js 【CORS(cross origin resource sharing) on ExpressJS之笔记】
app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*" ...
- 本地数据访问时出现跨域问题Cross origin requests are only supported for protocol schemes: ……
从桌面找到Chrome图标,右键属性,快捷方式,起始位置(安装路径) 注:在cmd中访问Program Files文件的方法 %ProgramFiles%=C:\Program Files %Prog ...
- 跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...
- 跨域的另一种解决方案CORS(CrossOrigin Resource Sharing)跨域资源共享
在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...
- (转)跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...
- 信息安全-浏览器-CORS:CORS(跨域资源共享)
ylbtech-信息安全-浏览器-CORS:CORS(跨域资源共享) 1.返回顶部 1. CORS,全称Cross-Origin Resource Sharing,是一种允许当前域(domain)的资 ...
- Web跨域问题总结
一.跨域问题的由来为了防止某些文档或脚本加载别的域下的未知内容造成泄露隐私,破坏系统等安全行为,1995年, Netscape 公司在浏览器中引入同源策略/SOP(Same origin policy ...
- web跨域解决方案
阅读目录 什么是跨域 常用的几种跨域处理方法: 跨域的原理解析及实现方法 总结 摘要:跨域问题,无论是面试还是平时的工作中,都会遇到,本文总结处理跨域问题的几种方法以及其原理,也让自己搞懂这方面的知识 ...
随机推荐
- zabbix监控php-fpm性能状态
1. 启用php-fpm状态功能 # cat /usr/local/php/etc/php-fpm.conf | grep status_path pm.status_path = /status 2 ...
- 弱校ACM奋斗史
看到这篇文章, 已是大三了, 我的ACM之路也即将走向终点, 感慨自己还是不够努力, 给自己的大学留下诸多遗憾. 和他们相比, 我差的就是太远了, 值得高兴的是我们学校有一个好老师-----赵靖老师, ...
- Mysql事务处理详细讲解及完整实例下载
一.Mysql事务概念 MySQL 事务主要用于处理操作量大,复杂度高的数据.由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.在 MySQL 中只有使用了 Inn ...
- zabbix java api
zabbix java api zabbix官方的api文档地址:https://www.zabbix.com/documentation/3.0/manual/api Zabbix功能 概观 Zab ...
- win7(iis7)localhost可以访问127.0.0.1不可以访问的问题解决办法
在C:\Windows\System32\drivers\etc文件夹下有hosts文件,用编辑器打开,看看有没有配置127.0.0.1 localhost 把前面的#去掉保存即可!
- 关于json数据格式错误
之前我在自己写json数据的时候,一直报错,改了很多没有找到错误,最后发现居然是单引号的问题,webstorm里的json数据格式只能用双引号,不能用单引号
- 【win10】大水牛主机插入耳机没有声音
主机:大水牛,技嘉主板 操作系统:win10 问题:主机前面插入耳机,没有声音,扬声器图标出错 解决 一..插入耳机 二..Realtek高清晰音频管理器 1.打开音频管理器,点击右下角的设置 2.点 ...
- 用PE安装操作系统时:无法创建新的系统分区 也无法定位现有系统分区 的解决办法
借助U盘的用PE安装操作系统时系统提示:无法创建新的系统分区 也无法定位现有系统分区 的解决办法... --------------------------------- 具体原因是安装时加载到安装程 ...
- VMware Workstation 12 Pro 之安装Windows10 EP系统
VMware Workstation 12 Pro 之安装Windows10 EP系统... --------------- 先准备好要用的Win10的镜像文件ISO ---------------- ...
- css中滚动条样式的设置
参数说明: 1.overflow-y : 设置当对象的内容超过其指定高度时如何管理内容:overflow-x : 设置当对象的内容超过其指定宽度时如何管理内容. 参数: visible:扩大面积以显示 ...