吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1293|回复: 8
收起左侧

[求助] 请求第三方api跨域问题

  [复制链接]
rsndm 发表于 2022-11-8 15:42
我新添加了一个aspx页面到网站程序中,此页面是用纯前端的方式实现的(html、css、js),其中会有一个调用第三方接口的功能,在本地环境测试无问题,但上线到服务器后出现跨域问题,如图所示,请问大家什么办法可以解决吗?

用本地ip访问情况下

用本地ip访问情况下
这是本地ip情况下

用服务器ip访问情况下

用服务器ip访问情况下
这是客户访问情况下,ip由127.0.0.1换成了10.2.6.230这个内网ip,于是所有接口都无法请求了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Lucifer_BW + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

怕不是个二傻子 发表于 2022-11-8 15:45
反向代{过}{滤}理啊 铁子
renpeng009 发表于 2022-11-8 15:46
838728713 发表于 2022-11-8 15:54
wihn 发表于 2022-11-8 16:03
服务器设置一下响应标头的Access-Control-Allow-Origin等属性
jidesheng6 发表于 2022-11-8 16:37
本帖最后由 jidesheng6 于 2022-11-8 16:39 编辑

一个是用proxy反向代{过}{滤}理,另外一个就是设置请求头:

六、使用反向代{过}{滤}理解决跨域
假设我们前端服务绑定的域名为:front.site.com 但是我们后端服绑定的域名是:back.site.com

这样的话我们在前端js中,就无法去请求back.site.com的后端服务了,这是因为host不同导致的;所以我们可以通过配置反向代{过}{滤}理服务器来解决跨域问题,我们配置文件可以像下面这样编写:

server{
        listen 9001;
        server_name front.site.com;

        location ^~ /api/{
        proxy back.site.com;
    }
}

这样配置之后,当我们访问front.site.com/api/xxx的时候,就可以通过反向代{过}{滤}理服务器将请求back.site.com/api/xxxx,从而解决了跨域的问题,绕过了浏览器的同源策略

七、配置header解决跨域
当浏览器在访问跨源服务器时,也可以在跨域服务器上直接设置nginx配置,不需要把实际访问后端的地址改为前端地址,这样可适性更高。

假设前端站点是:fron.site.com 后端地址为:back.site.com
我们在前端站点中使用js访问后端地址,一定会触发同源策略,导致跨域问题的产生。

我们可以进行如下配置:

server{
        listen 80;
        server_name front.site.com;

        add_header 'Access-Control-Allow-Origin' $http_origin;#全局变量获得当前请求origin,带cookie的请求不支持
        add_header 'Access-Control-Allow-Credentials' 'true';#为true可带上cookie
        add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';#允许的请求方法
        add_header 'Access-Control-Allow-Headers' $http_access_control_request_headers; #允许请求的header,可以为*
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

        if ($request_method='OPTIONS') {
        add_header 'Access-Control-Max-Age' 1728000;#OPTIONS 请求的有效期,在有效期内不用发出另一个预检请求
        add_header 'Content-Type' 'text/plain;charset=utf-8';
        add_header 'Content-Length' 0;

        return 204;#返回204状态码,或者返回200
    }

       location /{
        root /usr/share/nginx/html;
        index login.html;
}

}

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
无敌小车 + 1 + 1 我很赞同!
RuanLiang + 1 + 1 用心讨论,共获提升!

查看全部评分

myxiaowang 发表于 2022-11-8 18:01
1.谷歌浏览器装插件
2.中间件添加跨域头 如Nginx tomcat等
3.后端代码添加允许跨域
三滑稽甲苯 发表于 2022-11-8 20:10
服务器层面大佬都讲过了,那我就提个客户端方面的解决方案,自行编译可跨域的chrome浏览器
 楼主| rsndm 发表于 2022-11-10 10:31
感谢各位的帮助,已通过反向代{过}{滤}理成功解决了跨域,谢谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表