Origin 浏览器源
门牌号。协议、主机名、端口三样凑齐才算同一个门牌;改掉任何一样,就是隔壁那户人家。东西放在这一户,搬到隔壁不会自己跟过去。 所以「换个网址」对浏览器来说不是改名字,是搬家——而且是那种什么都带不走的搬家。
关键结构图
一个外框写「Origin」,框内并排三块「协议 / 主机名 / 端口」,框下挂着本地数据库、权限授权、离线作用范围、主屏身份四个挂件,并注明换其一即全部重来。
What
Origin 是浏览器给每个网页划的隔离边界,由「协议 + 主机名 + 端口」三件事共同决定。同一个 origin 下的页面共享存储和权限;三件事里任何一件变了,就是另一个 origin——数据、权限、缓存全部从零开始,而且不会有任何提示。
Origin 是浏览器安全模型的地基。同源策略规定:只有 origin 完全相同的页面,才能读到彼此的数据。
挂在 origin 上的东西包括本地数据库、各类本地存储、通知与摄像头等权限授权、离线脚本的作用范围,以及网页被装到主屏后的身份。换掉域名,这些全部重来。
边界:它只管浏览器里的事。原生应用和命令行工具不受这套约束。
StructureOrigin = 协议 + 主机名 + 端口 → 一套独立的存储与权限
When
在给一个网页产品挑域名、拆分公开页与登录区、或者迁移站点结构的时候调用它。 这些决定看起来是命名问题,实际上是在决定用户的数据以后住在哪里——选错了要搬第二次,而浏览器里的搬家没有自动搬运工。
How
先把三件事写出来:协议、主机名、端口。任何一件将来可能变,就先想清楚变的那天数据怎么办。 再问一句:公开内容和私密内容要不要放在同一个 origin?放在一起,安全规则要按路径一条条写,漏一条就是全泄;拆成两个主机名,只需要一条「这个主机名整个要登录」。
Examples
一个产品把官网和应用放在同一个域名下,用路径区分谁要登录。后来加了一个新页面忘了配规则,私密数据就从那个口子露了出去。换成两个主机名,这个错误在结构上就不成立。
一位用户在浏览器里用了半年的记账网页,攒下不少数据。产品换了域名之后,他打开新网址看到的是一个空白页面——数据还在旧 origin 里,只是新的那一户人家看不见它。
来源
类型:技术文档 / 标准
事实线:同源策略是浏览器安全模型的基础,origin 的三元组定义由互联网标准文档给出,各家浏览器按同一规则实现。
依据:公开的网络标准与浏览器实现文档。
读者使用方式:在决定产品用哪个域名之前,先把这块砖调出来——它会把「取什么名字好听」变成「数据以后住在哪」。
边界:适用于一切在浏览器里运行的产品;不涉及服务端之间的调用。
常见误读:以为主域名和子域名算「同一个网站」,数据会自动共享。不会,它们各有独立的存储与权限。