Nginx开启http2协议反向代理一些静态资源时比如js类型的资源当用户强制使用http11协议请求nginx时响应头中既没有transfer-encodingchunked也没有content-length有时获取的数据不完整请问如何解决
当用户强制使用HTTP/1.1协议请求Nginx时,Nginx会将HTTP/2协议的响应转换为HTTP/1.1协议的响应。在这种情况下,由于HTTP/1.1协议不支持服务器主动推送功能,可能导致部分数据不完整。
为了解决这个问题,你可以尝试以下方法:
- 禁用HTTP/2协议:在Nginx配置文件中,将
http2关键字从listen指令中删除,这样Nginx将只使用HTTP/1.1协议。示例如下:
listen 80;
- 配置Nginx为多个server块:在Nginx配置文件中,为HTTP/1.1和HTTP/2分别配置不同的server块。示例如下:
server {
listen 80;
server_name example.com;
# 配置HTTP/1.1
location / {
proxy_pass http://backend;
}
}
server {
listen 443 ssl http2;
server_name example.com;
# 配置HTTP/2
location / {
proxy_pass http://backend;
}
}
在上述配置中,对于HTTP/2协议的请求,Nginx将使用listen 443 ssl http2;指令进行处理,对于其他协议的请求,将使用listen 80;指令进行处理。
请注意,以上方法仅适用于当用户强制使用HTTP/1.1协议时,如果用户使用支持HTTP/2协议的客户端,仍然可以通过HTTP/2协议请求Nginx。
另外,还可以考虑通过其他方式来解决数据不完整的问题,例如使用CDN等。具体的解决方法需要根据你的实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/i4R4 著作权归作者所有。请勿转载和采集!