来源不按页面路径划分
对常见HTTP和HTTPS网页,同源比较使用方案、主机和规范化端口。https://example.test/a与同一来源的/b只是路径不同,不因此取得相互隔离的脚本权限;更换方案、主机或非等价端口,才可能改变来源。
HTML还定义不透明来源,其内部身份不能只靠可读地址重建。多个不透明来源序列化时都可能显示为null,但这不表示它们是同一来源,不能仅以这个相同字符串决定它们可以共享权限。
参考:[1]
同站与Cookie范围不能代替同源
同站比较常涉及方案与可注册域,忽略端口,因而同一个可注册域下的不同子域可以同站却不同源。浏览器对Cookie或其他功能使用“站点”时,并没有因此自动允许这些子域互读DOM。
Cookie的Domain与Path等又规定它被送往哪些请求,不按同源三元组提供完整隔离,尤其不按端口隔离。因此,把某个Cookie限定在一个路径,或把服务换到同主机另一端口,都不能直接当作同源策略给出的同一种安全边界。
跨源交互按专门规则开放
不同来源仍有受规则约束的交互;同源策略不是阻止每一个跨源网络请求的防火墙。例如Fetch的CORS机制让服务器选择某响应是否可向请求来源共享,某些请求则可能在响应未获共享前就已经到达服务器。
CORS允许读取一个响应,也不赋予调用方任意操纵远端网页DOM的权限,更不把资源访问变成无需认证。请求是否获准、响应是否可供脚本读取以及页面之间能否互访,是需要分别说明的规则。