【前端】浏览器跨域同源策略
来源:互联网 发布:非凡网络加速器下载 编辑:程序博客网 时间:2024/05/22 10:54
背景
最近有个全站迁移https的项目,设计十几个页面,起初只改了4行代码。作为一个前端测试门外汉,看到只有4行改动,便单纯的认为这个项目是不需要测试的,毕竟只有4行,研发同学自己评估一下直接上线不就行了嘛,直到研发同学问我:你懂http和https的区别吗?知道什么是跨域不?知道这个项目如果出问题会带来怎样的后果不?带着这些问题,我去详细的了解了一下,然后老实的开始了测试。
一、先说结论
因为浏览器的同源策略会限制页面不能拿到跨域请求的返回值,所以在迁移https时,需要注意所有页面的ajax请求,静态资源,提交等不能出现跨域,避免页面出现无响应或超时的问题。
二、再说原理
1.什么是跨域
页面在当前域下请求另一个域的资源时,为跨域请求;既同协议、同域名、同端口为同一个域,三个当中有任何一个不同,都是不同域。
(下表来源:http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html)
http://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.js
http://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/a.js
http://www.a.com/b.js同一域名,不同端口不允许http://www.a.com/a.js
https://www.a.com/b.js同一域名,不同协议不允许http://www.a.com/a.js
http://70.32.92.74/b.js域名和域名对应ip不允许http://www.a.com/a.js
http://script.a.com/b.js主域相同,子域不同不允许http://www.a.com/a.js
http://a.com/b.js同一域名,不同二级域名(同上)不允许(cookie这种情况下也不允许访问)http://www.cnblogs.com/a.js
http://www.a.com/b.js不同域名不允许
2.什么是同源策略
浏览器出于安全考虑,禁止页面获取跨域请求的返回值,这个策略就是浏览器的同源策略。
三、聊聊原因
1.为什么浏览器会有同源策略
从一个案例讲起
先看一下,有同源策略时,网站通常是怎么处理的:在百度首页登录时,实际是在passport.baidu.com域下完成了全部登录流程,并将登录结果的错误码回写到www.baidu.com域,以此通知登录成功并完成后续跳转。但是假设这样一个场景:www.baidu.com的登录页面弹出的是一个某银行网站的登录窗,银行的网站明显和www.baidu.com是不同域的,用户在不经意间输入了自己的用户名密码,并完成了提交。如果没有同源策略,www.baidu.com就可以直接获取用户的登录信息,包含用户名密码等,这是非常危险的。
此外,同源策略还会阻止跨域读取和提交cookie,这里就不举例了,很明显也是因为安全考虑。
所以,同源策略本质上是一个防止网站被恶意使用,保护用户信息的策略。
四、关于测试
了解了同源和跨域的含义,测试其实就相对容易了。网站迁移到https,需要注意前端的所有请求,主要是写在js中的请求,都必须是同域。第二个,因为有服务端返回url供前端请求的场景存在,这时就需要测试特别注意项目中的这一类url,要保证所有前端用来请求的url都是同域的,一旦跨域,将直接导致服务不可用等严重后果。特别强调一下,这类项目有页面自动化就最好了,全量回归就OK了。
- 【前端】浏览器跨域同源策略
- 浏览器同源策略与跨域请求的实现方法
- 浏览器同源策略
- 浏览器的同源策略
- 浏览器的同源策略
- 浏览器同源策略
- 浏览器的同源策略
- 跨域与同源策略
- 同源策略与跨域
- 跨域与同源策略
- 同源策略与跨域
- 跨域访问、同源策略
- 同源策略及跨域
- 前端扫雷之同源策略
- 浏览器的同源策略探究
- 浏览器同源策略以及跨域请求时可能遇到的问题
- 浏览器拦截跨域请求处理方法(同源策略不允许读取服务器远程资源)
- ajax请求总是不成功?浏览器的同源策略和跨域问题详解
- MySQL性能优化的最佳20+条经验
- Web使用记录挖掘_web挖掘
- 打印正反三角图形
- Java虚拟机(JVM)
- BZOJ_P2242&Codevs_P1565[SDOI2011]计算器(快速幂+扩展欧几里得+BSGS)
- 【前端】浏览器跨域同源策略
- coreboot学习2:项目源码的初步了解
- iOS: 如何判断字符串是否相等?
- Python源码阅读-内存管理机制(二) http://python.jobbole.com/83535/
- coreboot学习3:启动流程跟踪之bootblock阶段
- 禁止scrollVie滚动
- Python 基础——dict(二)
- 1067. Sort with Swap(0,*) (25)
- 聊天界面