理解浏览器跨域

1.跨域是怎么产生的?

浏览器的同源策略规定默认情况下,JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致。

域名要相同(mp.csdn.com和mp.csdn2.com不同),协议要相同(httphttps不同),端口号要相同(80端口和:8080就不同).

同源策略的限制:cookie,localstorage,无法读取  dom无法获取 ajax无法发送

2.为何会有同源策略呢?

   当然是为了保证用户信息的安全,防止恶意的网站窃取数据。

   1.对cookie的保护 ,   cookie 中存着sessionID 

这个sessionID的作用是什么呢?在我们访问一个网页,登录后,我们可以在一段时间内访问,编辑自己的个人信息,而不是每次访问都需要登录.如果你关闭浏览器,就需要重新登录,这就是sessionID在起作用.

网页是基于Http协议进行解析的,而Http是无状态协议。所谓的无状态便是下一次访问并不知道上一次访问的情况,每访问完一次后便断开连接。那么,服务器是怎么识别访问的用户身份的呢?这里便运用到了Session和Cookie。了解过Session和Cookie的人都会知道,Session是保存在服务器端的,而Cookie是保存在客户端的,每次请求都会带上cookie的信息.打开谷歌浏览器,F12调试模式,站到Application,就能看到Cookies信息.

试想一下,如果你支付宝的Cookies被你随便访问的一个网站获取了,然后他就能各种操作.

3.如何跨域呢?

一是通过Flash插件发送HTTP请求,这种方式可以绕过浏览器的安全限制,但必须安装Flash,并且跟Flash交互。不过Flash用起来麻烦,而且现在用得也越来越少了。

二是通过在同源域名下架设一个代理服务器来转发,JavaScript负责把请求发送到代理服务器,代理服务器再把结果返回,这样就遵守了浏览器的同源策略。这种方式麻烦之处在于需要服务器端额外做开发。

第三种方式称为JSONP,它有个限制,只能用GET请求,并且要求返回JavaScript。这种方式跨域实际上是利用了浏览器允许跨域引用JavaScript资源

<html>
<head>
    <script src="http://example.com/abc.js"></script>
    ...
</head>
<body>
...
</body>
</html>

第四种是设置自己的浏览器,允许跨域,这样做的风险是自己的浏览器会面临不安全的风险,也只适用于自己调试,一般会用一个没有敏感信息的浏览器去设置这种不安全模式. 

猜你喜欢

转载自blog.csdn.net/qq_38610536/article/details/83584681