如何解决nginx API跨源调用仅在某些浏览器中不起作用
TLDR:仅当从某些浏览器访问Web应用程序时,React应用程序的API调用将以状态码200返回,但没有响应,仅在响应时出现。
我在单个centOS7 VM上使用nginx和uwsgi部署了一个React + Django应用程序。
React应用由域中的nginx提供服务,当用户登录javascript应用时,针对子域(即backend.mydomain.com)上的同一nginx进行REST API请求,例如验证令牌并获取数据。
这适用于所有最新版本的Firefox,Chrome,Safari和Edge。但是,一些用户抱怨说他们无法从工作网络登录。他们可以访问该站点,因此很显然可以向他们提供javascript应用程序,但是当他们登录时,所有请求都返回状态200,但响应的主体为空。 (登录后,为了响应工作,需要几条信息随日志一起发回。)
例如,当我从自己所在的位置登录时,我会得到status = 200的响应,并且在响应主体中有一个参数很少的json对象。
但是,当其中一个用户从他们的浏览器向我显示了相同的内容时,他们会返回Status = 200,但响应为空。他们使用的浏览器版本与我使用的浏览器相同。他们以相同的方式尝试了Firefox和Chrome。
解决方法
在终于抓住其中一位用户后,向我发送了一些屏幕截图。我发现了问题。在适用于该网站的浏览器中,对后端的API调用在标头中将Referrer Policy
设置为strict-origin-when-cross-origin
。但是,在他们的浏览器中,与no-referrer-when-downgrade
相同。
我没有明确设置引荐来源网址策略,因此浏览器使用的是每个默认值,并且在不同版本的浏览器(https://developers.google.com/web/updates/2020/07/referrer-policy-new-chrome-default)之间存在差异
要解决此问题,我向nginx.conf文件添加了add_header 'Referrer-Policy' 'strict-origin-when-cross-origin';
并重新启动了服务器。此处有更多详细信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
以前有麻烦的用户现在可以在清除浏览器中的缓存后访问站点API资源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。