能否指定Laravel响应的HTTP头顺序,将自定义头放在响应头末尾?
Laravel 8 自定义响应头顺序调整问题
我尝试在Laravel(8)的响应中添加名为X-Custom的自定义响应头,功能可正常运行,但该头会被放在响应头栈的最顶部,示例如下:
HTTP/1.1 200 OK Date: Mon, 01 Nov 2021 10:58:44 GMT Server: Apache/2.4.29 (Ubuntu) X-Custom: 8675309 Cache-Control: no-cache, private X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59 Access-Control-Allow-Origin: * Content-Length: 15 Content-Type: text/html; charset=UTF-8 Content is here
使用低内存设备(ATTiny85)接收响应时,我能最早接收到的头是X-RateLimit-Remaining: 59,因此我希望能将X-Custom头放在整个响应头栈的最底部,效果如下:
HTTP/1.1 200 OK Date: Mon, 01 Nov 2021 10:58:44 GMT Server: Apache/2.4.29 (Ubuntu) Cache-Control: no-cache, private X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59 Access-Control-Allow-Origin: * Content-Length: 15 Content-Type: text/html; charset=UTF-8 X-Custom: 8675309 Content is here
根据我的调研,Laravel的各类响应头是从不同文件返回的,并非统一输出,因此无法通过简单排序调整顺序。请问是否可以通过Laravel本身的功能实现将指定头放在响应头末尾?
补充说明
受相关技术讨论启发,我意识到我仅需要这一个自定义头,不需要其余多余头。中间件方案无法实现需求,因为所有中间件都在Laravel推送这些系统响应头之前运行。我发现如果注释掉symfony/http-foundation/Response.php::send()中的$this->sendHeaders(),就能得到简化后的响应头,如下:
HTTP/1.1 200 OK Date: Tue, 02 Nov 2021 01:21:29 GMT Server: Apache/2.4.29 (Ubuntu) X-Custom: 8675309 Content-Length: 15 Content-Type: text/html; charset=UTF-8 Content is here
我认为这已经是我在Laravel层面能做到的最优效果,可能足以让目标设备正常工作,但为了彻底解决问题,我还将尝试从Apache端进行调整。
二次补充
参考现有技术方案,我在注释sendHeaders()的同一位置设置header("Content-type:"),成功移除了Content-Type头,最终效果如下:
HTTP/1.1 200 OK Date: Tue, 02 Nov 2021 02:23:45 GMT Server: Apache/2.4.29 (Ubuntu) X-Custom: 8675309 Content-Length: 15 Content is here
目前剩下的Content-Length头是由Apache保留的,也有可在PHP中移除该头的方案,但该方案会额外新增另一个头。
内容的提问来源于stack exchange,提问作者lukebeales
相关产品推荐
相关产品推荐

