【问题标题】:GET Bucket op response + AWS S3 + Content-Length headerGET Bucket 操作响应 + AWS S3 + Content-Length 标头
【发布时间】:2016-04-11 12:29:32
【问题描述】:

只是想知道 GET Bucket 操作响应是否会跳过 Content-Length 标头。我对此进行了测试,发现 GET Bucket 操作的响应中没有 Content-Length 标头。

如果响应不包含 Content-Length 标头,读取响应的应用程序如何理解响应正文的结束位置?

请求-响应片段:

    GET /?max-keys=1000&prefix&delimiter=%2F HTTP/1.1
    Date: Sat, 09 Apr 2016 18:27:23 GMT
    x-amz-request-payer: requester
    Authorization: AWS AKIAIP3KAUILC4GG7A2A:UG3bGvIjayrxrkxEX1mfrvETy/M=
    Connection: Keep-Alive
    User-Agent: Cyberduck/4.9.19632 (Mac OS X/10.10.5) (x86_64)

    HTTP/1.1 200 OK
    x-amz-id-2: yg76HSq5j0mi0oR6dXF8ZfGq722kHBWiMQmNvXPqiLxr1S4nGj5GVn1RVrPQrOUfNynxxaMSYEY=
    x-amz-request-id: B4468E68E10B6AEF
    Date: Sat, 09 Apr 2016 18:27:25 GMT
    x-amz-bucket-region: us-east-1
    Content-Type: application/xml
    Server: AmazonS3
    Connection: close

    <?xml version="1.0" encoding="UTF-8"?>
    <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">......</ListBucketResult>

谢谢!

【问题讨论】:

    标签: amazon-s3 aws-sdk


    【解决方案1】:

    Content-Length 标头在响应中是可选的。即使它呈现,它也可能无法反映真实的内容长度。考虑压缩响应。所以回答这个问题:当没有收到 Content-Length 时,客户端会一直读取,直到服务器关闭连接。

    在 Java 中,继续调用 InputStream.read() 直到它返回 -1。

    Is the Content-Length header required for a HTTP/1.0 response?

    【讨论】:

    • 感谢杨帆的回复。但是,如果客户端一直读取直到连接关闭,它如何区分当前正在处理的请求的主体和下一个请求的标头?此外,我相信 AWS 要求使用 HTTP/1.1。
    • 我指的是上述同一连接上的 GET 命令流水线化。只是想在这里澄清这一点。
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2020-07-15
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多