我是在Nginx后面的Gunicorn的帮助下运行Django的。我使用Nginx在响应中添加了一些头,但随后我决定用Django编写中间件,这也是这样做的。
我在头Access-Control-Allow-Headers
中添加了一些值。我添加了中间件,但忘了删除Nginx,它正在添加标头。因此,这两个层最后都添加了标题。后来,我在浏览器中查看了响应,这让我大吃一惊。
这是反应的截图,
这就引出了一个问题,这是怎么可能的?
Django的反应是不同的对象,Nginx的反应不同吗?响应对象的结构究竟是什么?
发布于 2020-02-05 08:51:07
真的,HTTP头不是对象。最好把它们看作是键值对,而不是别的。很有可能有重复的头和头值。
发生这种情况的原因只是基于特定的指令(服务器)或用于设置标头的代码,以及在请求处理中这些头添加的位置。
如果您在后端应用程序(Django,但实际上可以是任何东西,如PHP)中添加了一个标头,那么在NGINX中使用add_header
处理相同的标题,您将有重复的标题。
仅仅因为add_header
没有查看从上游接收到的标头(您的应用程序),然后盲目地添加您在其配置中指定的标头。
如果您希望具有"set“行为,则完全避免重复标题,然后使用第三方模块标题更多
这将为您提供一些额外的指令,以确保您期望的行为,例如more_set_headers
。但是,性能影响很小,因为set
意味着必须先从后端搜索现有的标头,然后再对其进行溢出。
https://stackoverflow.com/questions/60063401
复制相似问题