http代理服务器(十七)chunk与length

此前最早在arcadia存在某些js资源没有length也没有chunk,因此加上了这一块

            /**
* 这一块不应进入
* one of content_length and chunked in response header neccesary in http long connections
*/
// if(!response.headers().contains("Transfer-Encoding") && !"chunked".equals(response.headers().get("Transfer-Encoding")))
// response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, response.content().readableBytes());

后来长时间没有其它网站有这样的情况,去除了

后来篡改response又加上了

// 篡改response后需要重新设置length
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, response.content().readableBytes());

一年多运行的挺好的,据此猜测浏览器可能有某种机制,当chunk 与length同时存在时取其一,毕竟这一年多不可能所有uri都是length的,必然存在同时在response中

现在,当运行postman时,报

Error: Parse Error: Content-Length can't be present with chunked encoding

因此加上

// Error: Parse Error: Content-Length can't be present with chunked encoding
if(!response.headers().contains("Transfer-Encoding") && !"chunked".equals(response.headers().get("Transfer-Encoding")))
// 篡改response后需要重新设置length
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, response.content().readableBytes());

 

posted on 2023-08-29 21:14  silyvin  阅读(160)  评论(0)    收藏  举报