什么是浏览器的同源政策

本文详细阐述了浏览器的同源政策,指出其限制了js脚本访问其他域的资源(如cookie、localStorage、DOM和跨域请求),旨在保护用户信息安全。img和script请求不受此限制,因为它们不会涉及响应结果的敏感操作。

我对浏览器的同源政策的理解是,⼀个域下的 js 脚本在未经允许的情况下,不能够访问另⼀个域的内容。这⾥的同源的指的是两个域的协议、域名、端⼝号必须相同,否则则不属于同⼀个域。

同源政策主要限制了三个⽅⾯

第⼀个是当前域下的 js 脚本不能够访问其他域下的 cookie、localStorage 和 indexDB。

第⼆个是当前域下的 js 脚本不能够操作访问操作其他域下的 DOM。

第三个是当前域下 ajax ⽆法发送跨域请求。

同源政策的⽬的主要是为了保证⽤户的信息安全,它只是对 js 脚本的⼀种限制,并不是对浏览器的限制,对于⼀般的 img、或者script 脚本请求都不会有跨域的限制,这是因为这些操作都不会通过响应结果来进⾏可能出现安全问题的操作。

 

### 同源策略与同源页面概念 #### 1. **同源策略** 同源策略是一种浏览器的安全机制,用于防止不同源之间的恶意交互。具体来说,当两个URL具有相同的协议、域名和端口号时,它们被认为是同源的[^4]。这种策略限制了一个源下的文档或脚本如何与另一个源下的资源进行交互。 - 协议:指HTTP或HTTPS等通信协议。 - 域名:指具体的服务器地址,例如`example.com`。 - 端口:默认情况下,HTTP使用80端口,而HTTPS使用43端口。如果显式指定其他端口,则也会影响判断标准。 对于非同源的情况,浏览器会阻止一些敏感操作,例如读取或修改另一源上的DOM结构、Cookie或其他存储的数据[^2]。 --- #### 2. **同源页面定义** 同源页面是指那些满足上述同源条件的网页实例。换句话说,在同一协议、域名和端口号下运行的所有HTML页面都被视为属于同一个源。这些页面之间可以自由共享数据并相互调用JavaScript函数,因为它们被信任为来自同一个上下文环境。 例如: - URL A: `http://www.example.com/page1.html` - URL B: `http://www.example.com/page2.html` 由于两者都采用`http`作为协议,并且指向同样的主机名称(`www.example.com`)以及未特别指出任何特殊端口(即默认使用的80),所以他们会被认为是同源关系内的两页内容。 然而需要注意的是,即使路径部分有所不同也不会影响到其是否构成所谓的“同源”。只要前面提到的关键要素一致即可判定为同源状态。 --- #### 3. **Web安全性考量** 为了增强web应用的整体防护能力,除了依赖传统的同源政策之外还可以采取额外措施如CSP(Content Security Policy)[^1]: - CSP允许开发者制定更加精细的规定来控制哪些外部资源能够加载进入自己的网站当中; - 它还提供了进一步保护手段避免潜在危险行为的发生像嵌入式的javascript执行等等; 另外值得注意的一点就是虽然存在严格的隔离规定但是仍然可能存在合法需求去跨越不同的来源获取必要的资料或者服务于是乎诞生了几种技术解决方案用来解决这个问题其中包括但不限于JSONP(jsonp padding)方法[^3]. ```python function handleResponse(response){ console.log('Data received:', response); } ``` 上面展示了一段简单的回调处理程序代码片段适用于jsonp场景之下一旦远程服务器返回相应json格式加上封装好的函数名字那么本地就会自动触发这个预设好逻辑从而完成整个流程无需担心跨域带来的麻烦事前双方需达成共识关于预期接收形式等方面的信息交换过程. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值