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.html
  • http://example.com/app2/index.html

这些是同源的,因为服务器默认通过端口 80 传输 HTTP 内容

  • http://example.com:80
  • http://example.com

这些不是同源的,因为它们使用不同的方案

  • http://example.com/app1
  • https://example.com/app2

这些不是同源的,因为它们使用不同的主机名

  • http://example.com
  • http://www.example.com
  • http://myapp.example.com

这些不是同源的,因为它们使用不同的端口

  • http://example.com
  • http://example.com:8080

另见