代码之家  ›  专栏  ›  技术社区  ›  hanshenrik

将响应gzip压缩发送到未指定Accept-Encoding:gzip的客户端是一个bug吗?

  •  -1
  • hanshenrik  · 技术社区  · 6 年前

    Accept-Encoding: gzip ? 它是否违反了http规范?还是合法?

    https://www.amazon.com 总是发送gzip压缩的内容,不管接受编码头是什么,作为一个简单的测试来确认:

    $ curl https://www.amazon.com
    Warning: Binary output can mess up your terminal. Use "--output -" to tell
    Warning: curl to output it to your terminal anyway, or consider "--output
    Warning: <FILE>" to save to a file.
    
    $ curl https://www.amazon.com -I
    HTTP/2 405
    content-type: text/html; charset=UTF-8
    server: Server
    date: Sat, 03 Nov 2018 11:27:35 GMT
    set-cookie: skin=noskin; path=/; domain=.amazon.com
    strict-transport-security: max-age=47474747; includeSubDomains; preload
    x-amz-id-1: 2M3HZHHA9J21D3MTHH4K
    allow: POST, GET
    vary: Accept-Encoding,User-Agent,X-Amazon-CDN-Cache
    content-encoding: gzip
    x-amz-rid: 2M3HZHHA9J21D3MTHH4K
    x-frame-options: SAMEORIGIN
    x-cache: Error from cloudfront
    via: 1.1 1cc4305a3ce000ca199328864ca1c98e.cloudfront.net (CloudFront)
    x-amz-cf-id: OKz61IdKmCBfC97pPg-zmDhQnJzK3THXL2iYwegU5EtDaRf6yjBGzw==
    
    • curl抱怨它在这里接收二进制数据,因为它没有用HTML响应,而是gzip压缩的HTML,这是二进制数据。要实际查看html,请添加 --compressed 参数,它告诉curl添加标头 Accept-Encoding: gzip, deflate
    1 回复  |  直到 6 年前
        1
  •  2
  •   Julian Reschke    6 年前

    没有接受编码头字段的请求意味着用户代理没有关于内容编码的首选项。尽管这允许服务器在响应中使用任何内容编码,但并不意味着用户代理将能够正确处理所有编码。

    https://greenbytes.de/tech/webdav/rfc7231.html#rfc.section.5.3.4.p.4