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

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


问题描述

浏览器有同源限制(即协议、域名、端口相同),如果页面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 访问控制 - 中文

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容