考核内容:javascript 跨域的使用
题发散度: ★
试题难度: ★
解题思路:
什么是跨域?
跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
什么是同源策略?
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
跨域请求安全性问题
为什么浏览器要限制跨域请求,其中最主要的原因就是安全性问题,比如CSRF攻击。但是,既然不安全,为什么我们又要跨域请求呢?原因是有时为了服务器便于管理和减轻服务器压力,公司会把不同的资源放在不同的服务器上,这样就存在很多子域,这时比如A子域的html资源要去访问B子域的图片资源就会出现跨域请求了。
解决处理跨域请求方法
1. JSONP请求
ajax请求不同域会出现跨域请求,无访问权限,但平时在HTML页面写的<script>、<link>这些标签的src属性是不受跨域请求限制的,于是,JSONP的策略就是服务器端可以动态生成JSON文件,把客户端需要的数据放到这个文件中,让客户端通过<script>标签的src属性来请求这个文件,这样,一种解决方案就出来了
不过,JSONP方式无法发送POST请求,只能通过URL后面带参数实现,而且想要确定JSONP的请求是否失败并不容易,大多数实现都是结合超时时间来进行判断的。
2. xmlhttprequest请求
这种方法就是常说的AJAX方法,这是所有浏览器所支持的,所以我们只需要做的是在服务器端判断是否允许这个域访问,剩下的浏览器会自动做好
3. fetch请求
fetch是ES6中基于promise实现的,也可以结合async/await.
Fetch 是一个更理想的替代 xmlhttprequest 的方案
一个基本的 fetch 请求设置起来很简单
注意:所有版本的 IE 均不支持原生 Fetch
所以 跨域请求目前不仅只有 XMLHTTPRequest 方法;
答案:错误的是
A. 跨域请求目前只有 XMLHTTPRequest 方法