跨域以及解决跨域的几种方式

跨域以及解决跨域的几种方式,第1张

跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能 同源 使用的限制。

同源策略 是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议 + 域名 + 端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

常见的跨域场景:

对于简单请求,浏览器会直接发出CORS请求,具体的就是在头信息中,增加一个 Origin 字段

非简单请求是那种对服务器有特殊要求的请求,譬如 put delete 方法,或者 Content-Type 字段类型是 application/json 的,非简单请求在正式通信前,会增加一次请求,称为预检请求,也就是 options 方法。

浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。

与简单请求不同的是, option 请求多了2个字段:

Access-Control-Request-Method :必须字段,用来列出浏览器的CORS请求会用到哪些HTTP方法。

Access-Control-Request-Headers :该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段。

服务器收到"预检"请求以后,检查了 Origin 、 Access-Control-Request-Method 和 Access-Control-Request-Headers 字段以后,确认允许跨源请求,就可以做出回应。

表明服务器支持的所有跨域请求的方法。

表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

表示是否允许发送认证信息(Cookie)。

指定本次预检请求的有效期,单位为秒,允许缓存。在缓存期间,不用发出另一条预检请求。

因为浏览器的同源政策,就会产生跨域。比如说发送的异步请求是不同的两个源,就比如是不同的的两个端口或者不同的两个协议或者不同的域名。由于浏览器为了安全考虑,就会产生一个同源政策,不是同一个地方出来的是不允许进行交互的。

解决跨域的方法:

1、通过jsonp跨域。

2、通过修改document.domain来跨子域。

3、使用window.name来进行跨域。

4、使用HTML5中新引进的window.postMessage方法来跨域传送数据。

5、使用代理服务器,使用代理方式跨域更加直接,因为同源限制是浏览器实现的。如果请求不是从浏览器发起的,就不存在跨域问题了。

跨域的特点:

1、跨域只存在于浏览器,不在浏览器发请求是不会存在跨域问题的。

2、跨域是出现在ajax请求中,普通请求不会。

3、所有的跨域,都必须经过服务端的允许和配合,未经server端的允许和配合就实现跨越,说明浏览器有漏洞,不安全。

以上内容参考  百度百科-跨域网络


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/80557.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-04
下一篇2023-03-04

发表评论

登录后才能评论

评论列表(0条)

    保存