跨域请求 CORS

跨域请求失败

跨域的问题,是很多开发人员都要经历过的。
在这里插入图片描述
我想,像这样这样的错误你应该已经见过了吧。

Access to XMLHttpRequest at ‘http://localhost:8083/g628/About/Get.php’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

意思是说,你没有这个权限。

可现在极限开发呀,前后端分离,甚至还要细化前端和后台。所以说,跨域这个坎是肯定要过的。

跨域资源共享( CORS )

由于浏览器的同源策略,为了安全起见,就把跨域的请求给封了。
所谓的同源,就是协议、域、端口都要相同;有其一不同的都是跨域请求。

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。现代浏览器支持在 API 容器中(例如 XMLHttpRequest 或Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。

Access-Control-Allow-Origin

当然,你也可以告诉浏览器,我们前端后台商量好了,这个请求是被允许的!
那你大可以用 Origin 和 Access-Control-Allow-Origin来告知浏览器。
在这里插入图片描述
当然,上面是请求失败的例子,可以看见响应头里没有 Access-Control-Allow-Origin
这一般由后台或者是服务器来设置。

以PHP为例,
在这里插入图片描述

加上header(“Access-Control-Allow-Origin: *”);后,浏览器就会允许所有跨域请求了。

在这里插入图片描述

Nginx 代理 实现跨域

但是很遗憾的告诉你,有些后台是不会管你前端的,不然“大前端”是怎么来的呢?[手动狗头]

这个时候,我选择去配置nginx,关于nginx的教程还是挺多的。使用起来也是很容易。
话不多说,先上图。记住这个以 ‘/api’ 开头的请求失败的url
在这里插入图片描述

Nginx的使用这里就不多说了,读者自行学习吧。
只需要简单配置一个代理,就可以成功请求了。
在这里插入图片描述

可以看见下面的响应头中并没有看见有关Access-Control-Allow-Origin 的内容。但是状态码是 200 说明是完全OK的。
代理! 就是第二种实现跨域的方式。
在这里插入图片描述

基于Vue-cli 的proxyTable

我暂时就学到两种方式解决跨域问题。
当然,基于Vue的开发中,设置proxyTable也是可以的,但是,很遗憾,在 NODE_ENV === ‘production’ 的时候会失效。所以也我也只在开发环境下使用一下 proxyTable 而已。

猜你喜欢

转载自blog.csdn.net/qq_41297145/article/details/106157463