代理服务器 - 被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头(第一个请求有效,第二个请求无效)[重复]

Posted

技术标签:

【中文标题】代理服务器 - 被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头(第一个请求有效,第二个请求无效)[重复]【英文标题】:Proxy Server - Blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present (First request works, second request doesn't) [duplicate] 【发布时间】:2020-11-30 04:22:48 【问题描述】:

我有一个代理服务器,用于屏蔽域,它会加载资产(当用户通过 nginx 访问server.com 时,它实际上是指向server.com/123123)。

http 请求有效,但是我遇到了 ajax 请求问题。

所以,当我访问 example.com 时,网站正常运行 当我执行第一个 POST(使用 ajax)请求时,它可以工作 (https://server.com/ajax/marketing/ajax/recaptcha/validate) 当我执行第二个 POST 请求 (ajax) 时,它不起作用并显示 “从源 'https: 访问 'https://server.com/ajax/validate-order/H123HKK' 的 XMLHttpRequest: //example.com' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。”

在我的服务器 nginx (server.com) 中,我有这些标头:

add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

在我的 example.com nginx 中,我添加了:

proxy_set_header Host server.com;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

server 
   listen 443 ssl;
   listen [::]:443 ssl;

   server_name example.com;

   location = / 
       proxy_pass https://server.com/123123;
   

   #Certs
   #ssl_certificate y.pem;
   #ssl_certificate_key x.pem;

我的后端是 Laravel,但我不确定它是否与此有关。

我做错了什么,以至于一个 POST 请求有效,而另一个却没有? /validate-order/orderId 应该返回一个 json 所以这可能是原因吗?

【问题讨论】:

【参考方案1】:

显然 nginx 不会在错误响应代码中添加标头;并且有一种方法可以强制它始终add_header

add_header 'Access-Control-Allow-Origin' * always;

将“always”关键字添加到我服务器中的所有标头,它起作用了!

非常感谢akawhy's answer。

【讨论】:

以上是关于代理服务器 - 被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头(第一个请求有效,第二个请求无效)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

请求被 CORS 策略阻止

重定向被 CORS 阻止

获取“被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”使用 Axios 使用 MERN 堆栈

被 CORS 策略阻止的 React-S3

从源“http://localhost:8080/”访问“https://xxx”被 CORS 策略阻止(不存在“Access-Control-Allow-Origin”标头)错误

从源 xxxx 访问 XMLHttpRequest ' 被 CORS 策略阻止:对预检的响应。预检请求不允许重定向