今天在部署项目到一台新服务器的时候,在尝试登录时遇到了如下报错
ip:port Access to XMLHttpRequest at 'ip:port/login' from origin 'ip:port' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values 'ip:port, *', but only one is allowed.
这台服务器使用的nginx版本是1.16.1,该项目之前部署的服务器nginx版本为1.12.1,该项目在之前的服务器上没有问题。
后来找到了一篇文章,链接如下:
https://blog.csdn.net/guoguicheng1314/article/details/79105263/
出现这问题有可能是服务器端配置了跨域选项,在代码端也指定了跨域设置导致冲突,去掉一边的配置即可
我尝试了去掉nginx中的跨域设置,依旧不能正常运行,后来将代码中的允许跨域部分注释之后,代码成功运行。
# 如果是在服务器端部署,在nginx1.12环境下 CORS如下配置可以正常运行,但如果是1.16版本,需要把CORS跨域代码屏蔽掉
#try:
# CORS(app, resources=r'/*',support_credentials=True)
#except Exception as e:
# print(e)
最后没有太清楚原理,想来应该是nginx1.16版本中自动加入了跨域设置吧?有清楚的大佬可以在评论区留言,一起讨论一下。