同一服务器内跨端请求遇CORS错误,求解决方案
解决/login接口的CORS错误问题
先确认Nginx转发配置是否正确
你的核心问题大概率是Nginx没有把/login请求正确转发到7958端口的后端,或者转发时没处理好预检请求(OPTIONS)。先检查你的Nginx配置,确保/login路径的请求被代理到后端,并且正确配置CORS头:
server { listen 80; server_name 你的域名; # 处理前端页面请求,代理到Svelte的5173端口 location / { proxy_pass http://localhost:5173; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 前端页面的跨域头(如果需要) add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers Content-Type; } # 关键:把/login请求代理到后端7958端口 location /login { proxy_pass http://localhost:7958; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 处理浏览器的OPTIONS预检请求,必须返回204 if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers Content-Type; add_header Content-Length 0; add_header Content-Type text/plain; return 204; } # 给实际请求添加CORS头 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers Content-Type; } }
排查后端服务的响应头
用curl直接测试后端的/login接口,看它自己返回的CORS头是否和Nginx的冲突:
curl -I -X POST http://localhost:7958/login
如果后端返回了Access-Control-Allow-Origin但和Nginx设置的不一样,浏览器会报错。可以在Nginx的/login location里加一行proxy_hide_header Access-Control-Allow-Origin;,强制用Nginx的头覆盖后端的。
检查前端请求地址
确保前端代码里请求的是/login,而不是直接写http://localhost:7958/login。如果前端直接访问7958端口,那属于跨域(前端在5173端口),这时候Nginx的配置没用,必须让前端走域名的路径,由Nginx转发。
最后清除浏览器缓存
开发者工具里打开Network标签,勾选「Disable cache」,再重新测试,避免旧的响应头缓存导致配置不生效。
内容的提问来源于stack exchange,提问作者user3097328
相关产品推荐
相关产品推荐

