New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[js] 第40天 为什么会有跨域问题?怎么解决跨域? #150
Comments
浏览器为了安全,产生了同源策略,协议、域名、端口有一个不同,就会产生跨域。跨域方式有jsonp,代理方式,cors,domain改变主域相同,postmessage也可以 |
在使用Vue搭建的一个后端管理系统中,我使用axios请求本地的Node环境下的接口,但是请求失败,然后我错误信息是: 为什么会有跨域
什么是跨域Ajax 的便利性大家都清楚,可以在不向服务器提交完整的页面的情况下,实现局部更新页面。但是浏览器处于对安全方面的考虑,不允许跨域调用其他页面的对象。
怎么解决跨域下面就先介绍三种跨全域的方法: JSONP应该是最常见解决跨域的方法了,
然后使用
之后打开index.html;就可以在控制台看到返回的数据了: 至此,通过 JSONP 跨域获取数据已经成功了,jsonp这种方法跨域,他的兼容性很好,可以在古老的浏览器中国使用,因为这种方法是利用了 CORSCORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 ajax 只能同源使用的限制。 CORS 需要浏览器和服务器同时支持才可以生效,对于开发者来说,CORS 通信与同源的 ajax 通信没有差别,代码完全一样。浏览器一旦发现 ajax 请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。 因此,实现 CORS 通信的关键是服务器。只要服务器实现了 CORS 接口,就可以跨源通信。 前端:
这次前端启动需要使用
CORS与JSONP的使用目的相同,但是比JSONP更强大。 JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。 Server Proxy服务器代理,顾名思义,当你需要有跨域的请求操作时发送请求给后端,让后端帮你代为请求,然后最后将获取的结果发送给你。 假设有这样的一个场景,你的页面需要获取 CNode:Node.js专业中文社区 论坛上一些数据,如通过 https://cnodejs.org/api/v1/topics,当时因为不同域,所以你可以将请求后端,让其对该请求代为转发。 后端代码如下:
前端代码:
总结常用的跨域方式基本就是这三种:
其他的跨域方式还有: 参考资料:
|
为什么会有跨域?因为同源策略 |
|
前端常见跨域解决方案(全):https://segmentfault.com/a/1190000011145364 |
跨域解决方案:
|
浏览器为了安全,产生了同源策略,协议、域名、端口有一个不同,就会产生跨域。跨域方式有jsonp,代理方式,cors,domain改变主域相同,postmessage也可以 |
|
为什么会产生跨域? 因为浏览器的同源策略,不同协议、不同域名、不同端口会产生跨域。 |
第40天 为什么会有跨域问题?怎么解决跨域?
The text was updated successfully, but these errors were encountered: