代理服务器 - 被 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 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”使用 Axios 使用 MERN 堆栈
从源“http://localhost:8080/”访问“https://xxx”被 CORS 策略阻止(不存在“Access-Control-Allow-Origin”标头)错误