跨域(Cross-Origin)是指在互联网中,浏览器为了保护用户信息安全而实施的一种安全策略——同源策略(Same-Origin Policy),即浏览器禁止一个域上的文档或者脚本(如通过JavaScript发起的HTTP请求)与另一个域上的资源进行交互,除非明确授权。
具体来说,如果两个网页的协议(HTTP/HTTPS)、域名、端口号完全一致,就被认为是同源。若从一个源(例如,域A)加载的网页中的脚本尝试访问或操作另一个不同源(例如,域B)的资源,这种行为就会被浏览器阻止,从而出现“跨域”问题。
跨域的主要目的是防止恶意网站通过嵌入的脚本获取并利用另一个网站的内容,比如用户的敏感信息,以避免诸如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等安全风险。
解决跨域问题的方法有多种,包括但不限于:
- CORS(Cross-Origin Resource Sharing,跨源资源共享):服务器通过响应头允许特定源进行跨域访问。
- JSONP(JSON with Padding):通过动态创建
<script>
标签绕过同源策略,适用于GET请求。 - WebSocket可以通过指定协议握手实现跨域通信。
- 服务端代理:将请求转发到其他服务器,返回结果给客户端,让客户端看起来像是在和服务端同源通信。
- window.postMessage API:在不同窗口间进行跨域通信。
- WebRTC等现代Web技术也有相应的跨域机制。