一文了解跨域
跨域来源
浏览器为了确保资源安全,而遵循的一种策略. 称为「同源策略」
定义
源 = 协议 + 域名 + 端口号
实例
同源请求
所处源于目标源一致, 称为「同源」
所处源与目标源不一致, 称为「非同源」, 或「异源」, 或「跨域」
浏览器对跨域的限制
- DOM访问限制: 「源A」的脚本不能读取和操作「源B」的DOM
- Cookie访问限制: 「源A」不能访问「源B」的Cookie
- Ajax访问数据限制: 「源A」可以给「源B」发送请求, 但是无法获取「源B」的响应数据
几个注意点
- 跨域限制仅存在与浏览器端, 服务器端不受影响
- 即使跨域, Ajax也可以正常发出
<link>
<script>
<img>
等标签的请求也可能跨域, 但是浏览器对标签跨域不做严格限制, 几乎不影响开发
解决方案
CORS解决Ajax跨域问题
CORS概述
全称: Cross-Cross-Origin Resource Sharing 「跨域资源共享」, 是用于控制浏览器校验跨域请求的一套规范.
服务器依照CORS规范, 添加特定的响应头来控制浏览器校验
规则如下:
- 服务器明确表示拒绝跨域请求, 或者没有表示, 则浏览器校验不通过;
- 服务器明确表示允许跨域请求, 则浏览器校验通过
CORS解决简单请求的跨域
mermaid
sequenceDiagram
所处源 ->> 目标源: 发送请求
目标源 ->> 所处源: 响应
TODO