title: 跨域 author: Gamehu tags:
刚好这段时间对接其他产品,刚好处理了一下跨域的问题,借此机会稍微更加了解一下跨域(Cross-origin resource sharing)。
搬运搬运...
同源策略是一种Web浏览器安全性机制,旨在防止网站相互攻击。
同源策略限制一个源上的脚本访问另一源的数据。源由URI方案,域和端口号组成。
同源策略是一种限制性的跨域规范,它限制了网站与源域外部资源进行交互的能力。起源于多年前的策略是针对潜在的恶意跨域交互(例如,一个网站从另一个网站窃取私人数据)做出的响应。通常,它允许一个域向其他域发出请求,但不允许访问响应。
同源策略它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
同源策略限制以下几种行为:
1.) Cookie、LocalStorage、IndexedDB 等存储
2.) DOM查询
3.) AJAX 请求
但是有三个标签是允许跨域加载资源:
<img src=XXX>
<link href=XXX>
<script src=XXX>
URL 说明 是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js 同一域名,不同文件或路径 允许
http://www.domain.com/lab/c.js
http://www.domain.com:8000/a.js
http://www.domain.com/b.js 同一域名,不同端口 不允许
http://www.domain.com/a.js
https://www.domain.com/b.js 同一域名,不同协议 不允许
http://www.domain.com/a.js
http://192.168.4.12/b.js 域名和域名对应相同ip 不允许
http://www.domain.com/a.js
http://x.domain.com/b.js 主域相同,子域不同 不允许
http://domain.com/c.js
http://www.domain1.com/a.js
http://www.domain2.com/b.js 不同域名 不允许
1、 通过jsonp跨域 2、 iframe跨域 5、 postMessage跨域 6、 跨域资源共享(CORS) 7、 nginx代理跨域 8、 nodejs中间件代理跨域 9、 WebSocket协议跨域
比较抱歉的是我只用过nginx代理跨域、跨域资源共享(CORS)、WebSocket协议跨域...。
在大多数情况下,在用户浏览器中运行的脚本仅需要访问源相同的资源(请考虑首先对服务JavaScript代码的同一后端进行API调用)。因此,JavaScript通常无法访问其他来源的资源,这对安全性而言是一件好事。但是有些情况下需要跨域请求的。例如,不同系统间的一些对接。解决该问题就需要实现CORS,跨域资源共享(CORS)是一种浏览器机制,可实现对位于给定域外部的资源的受控访问。
如果不需要cookie的话,整个CORS通信过程都是浏览器自动完成的,前端不需要做额外的编码。浏览器一旦发现请求跨源,就会自动添加一些附加的头信息,复杂请求还会多一次预检的请求,但我们是不用感知的。因此,实现CORS通信的关键是服务器开启CORS。
{% asset_img b.png %}
{% blockquote KRISTOPHER SANDOVAL https://nordicapis.com/what-is-cors-cross-origin-resource-sharing/ What is CORS %} {% endblockquote %}
{% blockquote w3c https://www.w3.org/TR/2014/REC-cors-20140116/ Cross-Origin Resource Sharing %} {% endblockquote %} {% blockquote 阮一峰 https://www.ruanyifeng.com/blog/2016/04/cors.html 跨域资源共享 CORS 详解 %} {% endblockquote %}
本文引用的内容,如有侵权请联系我删除,给您带来的不便我很抱歉。