为了账号安全,请及时绑定邮箱和手机立即绑定

HTTP 响应抛出错误 gzip: invalid header

HTTP 响应抛出错误 gzip: invalid header

Go
料青山看我应如是 2022-05-18 09:48:40
无法理解有什么问题。ioutil.ReadAll 应该像其他 URL 一样使用 gzip。可通过 URL 重现:romboutskorea.co.kr错误:gzip:无效的标头代码:resp, err := http.Get("http://" + url)            if err == nil {                defer resp.Body.Close()                if resp.StatusCode == http.StatusOK {                    fmt.Printf("HTTP Response Status : %v\n", resp.StatusCode)                    bodyBytes, err := ioutil.ReadAll(resp.Body)                    if err != nil {                        fmt.Printf("HTTP Response Read error. Url: %v\n", url)                        log.Fatal(err)                    }                    bodyString := string(bodyBytes)                    fmt.Printf("HTTP Response Content Length : %v\n", len(bodyString))                }            }
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

本站的回复是错误的。它声称使用 gzip 编码,但实际上并没有压缩内容。响应看起来像这样:


HTTP/1.1 200 OK

...

Content-Encoding: gzip

...

Transfer-Encoding: chunked

Content-Type: text/html; charset=euc-kr


8000

<html>

<head>

...

“8000”来自分块传输编码,但“...”是未分块响应正文的开头。显然,即使声称是这样,它也没有被压缩。


看起来浏览器只是通过忽略错误的编码规范来绕过这个损坏的站点。浏览器实际上可以解决许多损坏的问题,这些问题并没有真正增加供应商解决这些问题的动力:(但你可以看到这curl将失败:


$ curl -v --compressed http://romboutskorea.co.kr/main/index.php?

...

< HTTP/1.1 200 OK

< ...

< Content-Encoding: gzip

< ...

< Transfer-Encoding: chunked

< Content-Type: text/html; charset=euc-kr

* Error while processing content unencoding: invalid code lengths set

* Failed writing data

* Curl_http_done: called premature == 1

* Closing connection 0

curl: (23) Error while processing content unencoding: invalid code lengths set

Python 也是如此:


$ python3 -c 'import requests; requests.get("http://romboutskorea.co.kr/main/index.php?")'

...

requests.exceptions.ContentDecodingError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing data: incorrect header check'))


查看完整回答
反对 回复 2022-05-18
?
千万里不及你

TA贡献1784条经验 获得超9个赞

我懂了

Content-Type: text/html; charset=euc-kr
Content-Encoding: gzip

检查正文内容:就像这里一样,它可能是一个 HTTP 响应,其中正文首先用 gzip 压缩,然后用分块传输编码进行编码。

NewChunkedReader将需要一个,如本例所示


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 861 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信