【问题标题】:How can I tell that the content of this URL is gzip-encoded?如何判断此 URL 的内容是 gzip 编码的?
【发布时间】:2017-06-26 23:26:36
【问题描述】:

我正在从https://kubernetes-charts.storage.googleapis.com/redis-0.5.1.tgz 下载Helm chart。 (它是 Redis 或与 Helm 或任何特别相关的事实与这个问题无关,这与 Content-Encoding 等问题无关。)

当我像这样检查它的标题时:

$ curl -H "Accept-Encoding: gzip" -I https://kubernetes-charts.storage.googleapis.com/redis-0.5.1.tgz

…我在输出中没有看到Content-Encoding 标头,Content-Type 被列为application/x-tar

HTTP/1.1 200 OK
X-GUploader-UploadID: AEnB2UqBzSXfTToMAdMARXSjJeN0on3jaNY3u74eXcWfvqsOwRpi38Xc6T0XrrmY4otPeySaYRwXyHccHYtChoPAgFQwYZhQMhcpZRWtZURRANGdfRJoupI
Expires: Tue, 27 Jun 2017 00:21:59 GMT
Date: Mon, 26 Jun 2017 23:21:59 GMT
Cache-Control: public, max-age=3600
Last-Modified: Fri, 05 May 2017 03:03:41 GMT
ETag: "e4184c81a58fb731283847222a1f4005"
x-goog-generation: 1493953421241613
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 3550
x-goog-meta-goog-reserved-file-mtime: 1493953414
Content-Type: application/x-tar
x-goog-hash: crc32c=bQHveg==
x-goog-hash: md5=5BhMgaWPtzEoOEciKh9ABQ==
x-goog-storage-class: STANDARD
Accept-Ranges: bytes
Content-Length: 3550
Server: UploadServer
Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,36,35"

下载后生成的文件是一个 gzip 压缩的 tar 存档。

以编程方式检测有效负载实际上是 gzip 压缩的正确方法是什么?或者这是相关网络服务器的问题?

【问题讨论】:

    标签: mime-types content-type content-encoding


    【解决方案1】:

    我认为服务器配置错误。由于 .tgz 只是 .tar.gz 的缩写,它应该得到内容类型 application/gzip-

    【讨论】:

    • 感谢您的回答。这也是我的理解,尽管我从@N3SS4H 的回答中看到,对于 gzip 压缩的 tar 文件没有基本同意的 MIME 类型。
    • Helm 的人似乎也认为它配置错误:github.com/kubernetes/charts/issues/1383#issuecomment-311310420 不过,有趣的是,如果静态对象是一个 gzip 压缩文件,那么 Content-Encoding 似乎是错误的解决方法这个问题。无论如何,您的怀疑是正确的,所以我接受您的回答。谢谢!
    【解决方案2】:
    Content-Type: application/x-tar
    

    这个标题告诉你类型,但我不确定那是 gzip

    https://superuser.com/questions/901962/what-is-the-correct-mime-type-for-a-tar-gz-file

    查看接受的答案 How to check if a file is gzip compressed? 。以编程方式识别的方式

    【讨论】:

    • 感谢您的回答。事实上,Content-Type 标头告诉我,静止的底层对象是一个.tar 文件。 (也许这是真的(正确配置);也许不是。) 如果 这是真的,那么由于我收到的是 gzip 压缩字节流,而不是流式 .tar 文件,那么我必须拥有一种查看gzip 压缩已应用于飞行中的对象的方法。我在这里看不到这样的机制。
    • 谢谢;是的;没错,我可以嗅探流的前两个字节以查看它们是否与 gzipped 文件的标识符匹配,但这可能会产生误报。我在这里关心的不仅仅是“我现在需要它来工作”(我可以让它与各种不同的解决方法一起工作),而更像是:“我错过了什么吗?”
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 2018-02-27
    • 2015-04-05
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多