同源策略(Same-Origin Policy)是一种重要的安全概念,它是由网页浏览器实施的一种策略,用来限制一个源(origin)的文档或脚本如何与另一个源的资源进行交互。它是一个用来防止某些类型的网络攻击,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的安全措施。
一个“源”由以下三个部分组成:
- 协议(Protocol):如
http
、https
。 - 域名(Domain):如
example.com
、localhost
。 - 端口(Port):如
80
(HTTP的默认端口)、443
(HTTPS的默认端口)。
同源策略规定,如果两个页面的协议、域名和端口号都相同,则它们有相同的源。只有当这三个部分完全匹配时,一个页面上的脚本才能无障碍地访问另一个页面的DOM并与之交互,包括读取和修改另一个页面的内容。
例如,考虑以下URL:
http://example.com/app1
http://example.com/app2
https://example.com/app1
(不同的协议)http://sub.example.com/app1
(不同的子域)http://example.com:8080/app1
(不同的端口)
根据同源策略,只有第一个和第二个URL是同源的,其他的都不是,因为至少有一个部分(协议、子域或端口)不同。
同源策略限制了以下几种行为:
- 一个源的文档或脚本无法读取或设置另一个源的文档的内容。
- 不能对非同源的网页发起AJAX请求。
- 无法访问非同源iframe的内容。
尽管同源策略对网络安全非常重要,但在实际应用中,开发者经常需要进行跨源资源共享。为此,可以使用一些绕过机制,如实现跨源资源共享(CORS)、使用JSONP、或在服务端设置代理等。