关于HTTP Header 头的一个奇怪问题

关于使用 php 来设置 http 头的出现的问题。我使用php 来测试 HTTP header 头时候发现,假如我按以下代码来设置相应头的话,却发生了难以理解的错误,谁能帮忙解释一下其中的原因?

clipboard.png


而且除了以上的问题外,我按以下的代码来设置响应头,结果在页面上只有最后一个响应头能够显示,其他被覆盖,但是原来的Content-Encoding:gzip 这个怎么都不会被覆盖

clipboard.png

图片描述

下面补充问题说明,如果显式声明为 gzip 编码,则会有下面的无法访问此网站的错误。

clipboard.png

clipboard.png

相关服务器配置代码

clipboard.png

阅读 3.9k
2 个回答

第一个问题,浏览器是会根据你的Content-Encoding值对响应进行解码,你传的值(123,none)不正确当然出现乱码,然后gzip是因为你的响应体并没有做gzip压缩处理,而浏览器却对你的响应体做了解压处理,那肯定是解压失败就无法访问咯。
第二个问题参战楼上。

多个Content-Encoding头情况,浏览器按照从上往下的顺序来解码
clipboard.png

clipboard.png

这里响应头写反顺序则报错

clipboard.png

clipboard.png

我这边测试了一下第二个问题, 除非 ·header· 第二个参数设置为 ·false· , 否则都会覆盖。

至于第一个问题, 你是使用什么方式请求的? 我这边用浏览器请求, 可以看到请求头 ·Accept-Encoding:gzip, deflate, br· , 这是 ·Chrome· 浏览器支持的编码格式, 建议看一下你的请求支持什么编码格式传输正文

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题