浏览器同源策略
概述
当两个url的协议、ip、端口号都相同时,可以说两个url是同源的,同源策略的目的就是为了保证用户信息的安全,一个网页无法去读取另外一个网页的信息,就比如用户认证后的返回的access_token如果可以让浏览器其它打开的网页读取到时,那么该网页也有了访问资源的权限,是非常危险的,所以因为同源策略会有很多限制。
限制内容
当两个url不同源时,以下会受到限制
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM 无法获得。
- AJAX 请求不能发送。
跨域问题
问题所在
当传统的单体项目使用模板引擎渲染页面时是没有太大问题的,当在前后端分离架构下,前后端分开部署必定会导致套接字不同(ip + port组合),所以当前端发送ajax请求到后端时必定会有跨域问题存在,无法正常发送请求。
解决问题
解决该问题通常有三种方法
- JSONP
- WebSocket
- CORS 只在这里记录一下最常用的第三个CORS
CORS
跨域资源共享(Cross-Origin Resource Sharing),允许浏览器向跨域服务器提交ajax请求,需要服务器去支持CORS,通常是需要在代码中配置一下,即可支持跨域问题
浏览器将请求分为简单请求与非简单请求。 简单请求如下:
- 请求方法是以下三种方法之一:HEAD、GET、POST
- 同时HTTP的头信息不超出以下几种字段:
- Accept、
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain 我们经常发post的content-type:application/json的json数据的请求,此类请求就属于非简单请求,非简单请求会提前向服务器发送options预检请求,请求通过后才会发正式请求,所以经常在浏览器的调试栏中经常看到options请求(踩过坑,测试报告说options请求不安全,需要禁用,禁用后所有非简单请求都无法正常使用)
本文参考: