需求:对接一个国外接口,我试了下,对端服务器没有添加响应头,于是产生了跨域,然后我又在hbuildx的内置浏览器调试后发现还存在请求被墙的问题。
那么解决的问题有两个:跨域和被墙。

跨域
基于同源策略: 是一种约定,WEB 应用只能请求同一个源的资源。
什么时候会跨域: 协议名、域名、端口号 有一个不同。

怎么解决
1.JSONP(JSON with Padding):JSONP是一种跨域请求的方式,它利用了<script>标签可以跨域引用资源的特性。通过在请求URL中添加一个回调函数的名称,服务器返回一个被该函数包裹的结果,从而实现跨域请求。

不安全,只支持GET。

2.CORS(Cross-Origin Resource Sharing):CORS是一种跨域资源共享的机制,可以在服务器端设置响应头部中的Access-Control-Allow-Origin字段来允许指定的域名访问资源。通过配置服务器的响应头,可以控制跨域请求的访问权限。

应用普遍,但添加响应头“Access-Control-Allow-Origin”字段需要有服务器的修改权限。

3.代理服务器:可以使用一个代理服务器,让客户端将请求发送给代理服务器,然后由代理服务器去请求目标服务器并将结果返回给客户端。这样客户端并不直接和目标服务器进行通信,可以避免跨域限制。

如果是本地开发接口,拥有服务器权限 ,直接采用第二种方法添加Access-Control-Allow-Origin响应头即可解决跨域。
访问第三方接口的情况下,对端服务器没有设置返回Access-Control-Allow-Origin字段,此时产生了跨域问题,同时由于是第三方接口,我们是没有服务器的修改权限的。
这时采用代理服务器,因为跨域只存在浏览器中,服务器与服务器之间不存在跨域,代理服务器请求第三方接口拿到返回数据后,将返回数据添加响应头“Access-Control-Allow-Origin”,再返回给前端即可解决跨域问题。

====================================================

最终没有选择nginx,选择买了个海外VPS来用node写了个服务器来做转发。

 posted on 2023-10-01 16:58  外包侠  阅读(26)  评论(0编辑  收藏  举报