Origin
Web 内容的源由用于访问它的 URL 的方案(协议)、主机名(域)和端口定义。只有当方案、主机名和端口都匹配时,两个对象才具有相同的源。
某些操作仅限于同源内容,并且可以使用 CORS 来解除此限制。
不透明源
不透明源是一种特殊的浏览器内部值,它模糊了资源的真实源(不透明源始终序列化为 null)。浏览器使用它们来确保资源隔离,因为它们从不被视为与任何其他源相等——包括其他不透明源。
不透明源适用于资源的真实源敏感、不能安全用于安全检查或不存在的情况。具有不透明源的资源在其请求中的 Origin HTTP 标头将设置为 null。它还将无法通过与任何其他资源的同源检查,因此仅限于可用于跨源资源的操作。
使用不透明源的常见情况包括
- 带有 sandbox 属性且不包含
allow-same-origin标志的 iframe 中的文档。 file:URL 通常被视为不透明源,以便文件系统上的文件无法相互读取。- 使用
DOMImplementation.createDocument()等 API 以编程方式创建的文档。
示例
这些是同源的,因为它们具有相同的方案 (http) 和主机名 (example.com),并且不同的文件路径无关紧要
http://example.com/app1/index.htmlhttp://example.com/app2/index.html
这些是同源的,因为服务器默认通过端口 80 传输 HTTP 内容
http://example.com:80http://example.com
这些不是同源的,因为它们使用不同的方案
http://example.com/app1https://example.com/app2
这些不是同源的,因为它们使用不同的主机名
http://example.comhttp://www.example.comhttp://myapp.example.com
这些不是同源的,因为它们使用不同的端口
http://example.comhttp://example.com:8080