nginx(一):跨域问题

  • 为什么会发生AJAX跨域?


浏览器限制

跨域

XHR(XMLHttpRequest)请求

同时满足以上三个条件的时候才会出现跨域问题

 

  • 解决方案:

被调用方解决方案(支持跨域):

前端代码写法(假设:a.com 调用方,b.com被调用方)如下,直接在代码中写明被调用方的具体地址

$.getJSON("http://b.com/test/get1").then(function(jsonObj) {
        result = jsonObj;
});

1. 浏览器直接发送请求到其他域的应用服务器

浏览器在请求头中添加Origin参数记录host,应用服务器通过实现filter,在响应头中设置Access-Control-Allow-Origin参数为host,从而通过浏览器的检验,达到跨域的目的

 

 

带Cookie的跨域

1. Access-Control-Allow-Origin:*?  这个参数的值不可以为*,需要是具体调用方的host,可以通过动态读取请求头的Origin参数设置该参数的值。

2. 发送的cookie是被调用方域名的cookie,而不是调用方的cookie

 

2. 浏览器将请求发送到其他域系统的http服务器(如:apache,nginx),然后http服务器再将请求发送到应用服务器。(在http服务器中配置请求头)

nginx配置如下:

 

调用方解决方案(隐藏跨域):

nginx配置:
server {
    listen       80;
    server_name  a.com;

    location / {
        proxy_pass http://localhost:8081/ ;
    }
    
    location /panda {
        proxy_pass http://localhost:8080/test ;
    }
}
前端代码:
$.getJSON("/panda/get1").then(function(jsonObj) {
                   result = jsonObj;
               });

注意:这里url用的相对地址 就是访问 a.com/panda ,然后nginx的设置会使其反向代理到http://localhost:8080/test

实际上是a.com访问http://localhost:8080/test,但是 浏览器看起来是a.com访问a.com/panda根本没跨域! 当然么有跨域问题!

通过nginx解决跨域问题,两种方案的区别是:这个nginx是安装在调用方还是被调用方,安装在调用方,那么前端只需要写出相对地址url,安装在被调用方,那么前端需要写出被调用方的绝对路径

 

http {
    upstream upstream_name{
        server 192.168.0.28:8001;
        server 192.168.0.28:8002;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            proxy_pass http://upstream_name;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx提示403 Forbidden是指服务器拒绝访问某个资源或执行某个操作的错误。而关于问题nginx可以通过配置反向代理来解决。引用和引用都提到了nginx反向代理解决前端问题。 为了解决问题,可以在nginx配置文件中添加以下配置: ``` location /api { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ``` 上述配置将请求转发给后端服务器,并在请求头中添加必要的信息。其中,`/api`是前端访问后端接口的URL前缀,`backend_server`是后端服务器的地址。 这样配置后,在前端访问接口时,只需要将接口的URL改为`/api/接口路径`即可。 需要注意的是,配置完成后,需要重启nginx使配置生效。 以上是解决nginx提示403 Forbidden问题的方法。希望对您有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端问题](https://blog.csdn.net/jcoiwenwfkowe/article/details/117867869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [nginx访问静态资源403 forbidden的问题](https://blog.csdn.net/weixin_43358050/article/details/127320742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值