浏览器跨域访问 - 学习笔记(草稿)

断断续续看这个问题好几天了,以下做一下简单总结。


问题描述

浏览器有同源限制(即协议、域名、端口相同),如果页面A想要访问另外一个非同源页面B(不清楚怎么描述,理解为一个URL)提供的WebAPI,则浏览器是不允许的。

问题本质

跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是CSRF跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从HTTPS的域跨域访问HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。这本质是浏览器实现的问题

解决方案

  1. JSONP方式
    服务器端将数据以jsonp方式包裹起来,再在浏览器端以jsonp方式访问。

  2. Access-Control-Allow-Origin方式
    服务器端返回的数据Header中添加Access-Control-Allow-Origin控制为*,则可以供非同源网页访问。

[注]这两种方式都需要服务器端配合,没法只在浏览器端修改来实现。

参考

MDN Http 访问控制 - 中文

你可能感兴趣的:(浏览器跨域访问 - 学习笔记(草稿))