2016-04-10 6 views
0

Просто хотел узнать, пропускает ли ответ GET Bucket op заголовок Content-Length. Я протестировал это, и я увидел, что в ответе для GET Bucket op не было заголовка Content-Length.GET Bucket op response + AWS S3 + Content-Length header

Как приложение, читающее ответ, понимает, где заканчивается тело ответа, если ответ не содержит заголовка Content-Length?

Request-Response Отрывок:

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> 

Спасибо!

ответ

0

Заголовок Content-Length является необязательным в ответе. И это может не отражать реальную длину контента, даже если она представлена. Подумайте о gzip-ответе. Поэтому, чтобы ответить на вопрос: когда контент Content-Length не получен, клиент продолжает чтение, пока сервер не закроет соединение.

В Java продолжайте звонить InputStream.read(), пока он не вернет -1.

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

+0

Спасибо за ответ Yangfan. Однако, если клиент продолжает читать до закрытия соединения, как он сможет различать тело для текущего обрабатываемого запроса и заголовок следующего запроса? Кроме того, AWS обязуется использовать HTTP/1.1, я считаю. – Rakshith

+0

Я имел в виду Pipelining команд GET на том же соединении выше. Просто хотел пояснить этот момент. – Rakshith