我得到了一个由 Chrome DevTools 导出的 har 文件。它显示了一个不完整的 http 响应,错误为
net::ERR_INCOMPLETE_CHUNKED_ENCODING
。不完整的 http 响应已传输 4096 字节。
"content": {
"size": 67469,
"mimeType": "application/octet-stream",
"compression": 63629
},
"redirectURL": "",
"headersSize": 256,
"bodySize": 3840,
"_transferSize": 4096,
"_error": "net::ERR_INCOMPLETE_CHUNKED_ENCODING"
},
我的问题是 Chrome DevTools 如何知道 http 响应的内容大小为 67469 字节,因为响应是不完整的?
这里是Chrome DevTools的完整请求记录(敏感信息被替换):
{
"_initiator": {
"type": "script",
"stack": {
"callFrames": [1, 2, 3, 4],
"parentId": {
"id": "4",
"debuggerId": "xxx.-xxx"
}
}
},
"_priority": "High",
"_resourceType": "fetch",
"cache": {},
"connection": "24665",
"request": {
"method": "GET",
"url": "http://www.example.com?hello=world",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Accept",
"value": "*/*"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate"
},
{
"name": "Accept-Language",
"value": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
},
{
"name": "Cache-Control",
"value": "no-cache"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Cookie",
"value": "..."
},
{
"name": "Host",
"value": "www.example.com"
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Referer",
"value": "http://www.example.com/ref?hello=world"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50"
}
],
"queryString": [
{
"name": "hello",
"value": "world"
}
],
"cookies": [1, 2, 3, 4],
"headersSize": 2273,
"bodySize": 0
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Cache-Control",
"value": "private"
},
{
"name": "Content-Disposition",
"value": "attachment;FileName=example.pdf"
},
{
"name": "Content-Type",
"value": "application/octet-stream"
},
{
"name": "Date",
"value": "Wed, 22 Feb 2023 17:10:05 GMT"
},
{
"name": "Server",
"value": "Microsoft-IIS/8.0"
},
{
"name": "Transfer-Encoding",
"value": "chunked"
}
],
"cookies": [],
"content": {
"size": 67469,
"mimeType": "application/octet-stream",
"compression": 63629
},
"redirectURL": "",
"headersSize": 256,
"bodySize": 3840,
"_transferSize": 4096,
"_error": "net::ERR_INCOMPLETE_CHUNKED_ENCODING"
},
"serverIPAddress": "1.1.1.1",
"startedDateTime": "2023-02-22T17:10:08.836Z",
"time": 130.23999985307455,
"timings": {
"blocked": 9.5169998755157,
"dns": -1,
"ssl": -1,
"connect": -1,
"send": 0.556,
"wait": 66.90000020015239,
"receive": 53.266999777406454,
"_blocked_queueing": 3.2859998755156994,
"_blocked_proxy": 0.8559999999999999
}
},
上面不完整的http是别人制作的。我尝试重现它但失败了。我组成了一个不完整的 http 响应,其中包含第一个块(块大小 CRLF 块数据 CRLF)并且没有最后一个块('0' CRLFCRLF)。 Chrome DevTools 显示:
"content": {
"size": 0,
"mimeType": "application/octet-stream",
"compression": 0
},
"redirectURL": "",
"headersSize": 280,
"bodySize": 0,
"_transferSize": 280,
"_error": "net::ERR_INCOMPLETE_CHUNKED_ENCODING"
我的问题是 Chrome DevTools 如何知道 http 响应的内容大小为 67469 字节,因为响应是不完整的?