Nginx配置跨域不生效可能是这个原因
文章目录
今天debug一跨域问题,本来觉得就一很简单的问题,结果被无情打脸,费了老大劲了,有必要复盘下。
同样的接口Get
好使而POST
就是不行,前端那里一直报跨域请求失败。
|
|
但我明明Nginx
已经加上相关配置上了,没道理啊。
|
|
再三确认配置是没问题后只能求助GG,结果还真有发现,原来add_header
不是所有返回都会追加,只限特定状态码的返回才有效,如果想所有返回都生效需要加上always
选项参数。具体来看下官方的解释:
|
|
Adds the specified field to a response header provided that the response code equals 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), or 308 (1.13.0).
于是修改配置加上always
|
|
重启Nginx
,刷新页面,wow,跨域报错消失了,但是接口Post
报500了错误。
此时已经完全明白过来了,正是由于这个接口GET
请求返回正常,所以返回的header
中会添加上Access-Control-Allow-Origin
,而POST
时接口返回500add_header
不起作用,Access-Control-Allow-Origin
添加不上所以才有了一直不生效的错觉,好坑~~~。不过还是怪自己没有完全掌握参数的用法,还是要多读文档。
参考
https://stackoverflow.com/questions/35946006/nginx-cors-doesnt-work-for-post
文章作者 XniLe
上次更新 2023-10-10