博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨域资源共享(CORS)安全性浅析
阅读量:6452 次
发布时间:2019-06-23

本文共 970 字,大约阅读时间需要 3 分钟。

hot3.png

提起浏览器的同源策略,大家都很熟悉。不同域的客户端脚本不能读写对方的资源。但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域。但这些方式都存在缺陷,无法完美的实现跨域读写。所以在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源。

 

 

一、背景

提起浏览器的同源策略,大家都很熟悉。不同域的客户端脚本不能读写对方的资源。但是实践中有一些场景需要跨域的读写,所以出现了一些hack的方式来跨域。比如在同域内做一个代理,JSON-P等。但这些方式都存在缺陷,无法完美的实现跨域读写。所以在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源。目前主流浏览器均支持CORS。

二、技术原理

CORS定义了两种跨域请求,简单跨域请求和非简单跨域请求。当一个跨域请求发送简单跨域请求包括:请求方法为HEAD,GET,POST;请求头只有4个字段,Accept,Accept-Language,Content-Language,Last-Event-ID;如果设置了Content-Type,则其值只能是application/x-www-form-urlencoded,multipart/form-data,text/plain。说起来比较别扭,简单的意思就是设置了一个白名单,符合这个条件的才是简单请求。其他不符合的都是非简单请求。 

之所以有这个分类是因为浏览器对简单请求和非简单请求的处理机制是不一样的。当我们需要发送一个跨域请求的时候,浏览器会首先检查这个请求,如果它符合上面所述的简单跨域请求,浏览器就会立刻发送这个请求。如果浏览器检查之后发现这是一个非简单请求,比如请求头含有X-Forwarded-For字段。这时候浏览器不会马上发送这个请求,而是有一个preflight,跟服务器验证的过程。浏览器先发送一个options方法的预检请求。下图是一个示例。如果预检通过,则发送这个请求,否则就不拒绝发送这个跨域请求。

转载于:https://my.oschina.net/zyt1978/blog/643675

你可能感兴趣的文章
SMS 2003系列—分发Live Meeting 2007客户端
查看>>
VHDX差异磁盘环境优化和扩展
查看>>
Windows phone 应用开发[11]-Pex 构建自动化白盒测试[上]
查看>>
后网络时代思科的云计算野心
查看>>
即时数据模块设计 版本V5
查看>>
正则表达式 学习笔记5.2
查看>>
技术分享连载(十三)
查看>>
centos directory server
查看>>
自动监控主从MySQL同步的SHELL脚本
查看>>
Solr的搭建
查看>>
nodejs链接mongodb数据库
查看>>
新工作的这一个月
查看>>
RAID损坏后 对数据的完整备份
查看>>
参考文献规范格式
查看>>
物联网未来趋势:边缘计算正渐渐兴起
查看>>
error recoder,error debug for openStack kilo
查看>>
聚类算法概述
查看>>
Windows Server 2012正式版RDS系列⑿
查看>>
CentOS ips bonding
查看>>
Active Defense Harbinger Distribution
查看>>