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