浏览器安全策略 & CORS

本文详细介绍了浏览器的同源策略以及跨域资源共享(CORS)机制。CORS通过一系列HTTP头解决跨域问题,包括预检请求、简单请求和相关HTTP头的使用,确保了跨源数据交互的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CORS全称Cross-Origin Resource Sharing, 即跨域资源共享,是一个由一系列HTTP头组成的系统,这些HTTP头决定浏览器是否阻止前端javascript代码获取跨域请求的响应。为什么需要CORS ? 这是因为浏览器存在同源安全策略,当我们在当前域请求另外一个域的资源时,浏览器默认会阻止脚本读取它的响应,这时CORS就有了用武之地。

同源策略

同源策略是浏览器的一个重要的安全策略,它用于限制一个源的文档或其加载的脚本如何与另外一个源进行交互,它能够隔绝恶意文档,减少被攻击的媒介。

同源的定义

如果两个URL的协议、主机名和端口号都是相同的,那么这两个URL就是同源的,

下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:

URL 结果 原因
http://store.company.com/dir2/other.html 同源 只有路径不同
https://store.company.com/secure.html 非同源 协议不同
http://store.company.com:81/dir/etc.html 非同源 端口号不同
http://news.company.com/dir/other.html 非同源 主机名不同

也就是说当在http://store.company.com/dir/page.html这个网站中向https://store.company.comhttp://store.company.com:81http://news.company.com三个地址发起AXJX请求都会失败并且会报跨域的错误。这就是浏览器的同源策略,只能访问同源的数据。

源的修改

实际上,在一个源下可以修改当前源,比如在http://hello.word.com/index.html下,有一个脚本执行了以下语句:

document.domain = 'word.com'

那么当前网站能与http://word.com通过同源检测,即允许访问http://word.com的数据。需要注意的是document.domain只能设置为当前域的父域, 并且在设置之后,端口号会变成null,例如还是在http://hello.word.com/index.html下执行以下语句会失败:

document.domain = 'hello2.word.com'

跨源网络访问

事实上,不是所有跨源操作都被禁止。跨源操作主要分为三大类,跨源写操作跨源资源嵌入跨源读操作

  • 跨源写操作一般是被允许的。如超链接、重定向、表单提交。
  • 跨源资源嵌入一般也是被允许的。如嵌入<img /><video /><audio />等。
  • 跨源读操作不被允许,要实现跨源读操作,可以使用JSONPCORS

跨源访问

跨域(跨源)的解决方案主要有两种,JSONPCORS, 当然还可以是代理或者反代理的手段。

JSONP

JSONP是一种hack,并不是一种官方解决跨域的手段,JSONP只能进行GET请求。它主要是利用<script>标签来发起请求,来达到突破浏览器同源策略的目的。

<html>
  <head>
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值