S3 REST for PUT(直接上传)操作是否分块?

S3 REST for PUT(直接上传)操作是否分块?,rest,amazon-web-services,file-upload,amazon-s3,put,Rest,Amazon Web Services,File Upload,Amazon S3,Put,在S3 REST API中,PUT操作(即直接上载而非多部分上载)如何通过HTTP发送对如此大文件(即千兆字节)的请求?直接上传是否也分块(如多部分上传)并在内部定义了大小 当我尝试使用S3RESTAPI执行PUT(直接上传)操作时,我可以上传的最大容量约为5GB,甚至Amazon也表示,他们对直接上传的最大限制是5GB。但是,当尝试上载大于限制的文件时,它会抛出一个异常“您建议的上载超出了允许的最大大小”,并且在头标记“transfer encoding”为“chunked”的位置返回一个HT

在S3 REST API中,PUT操作(即直接上载而非多部分上载)如何通过HTTP发送对如此大文件(即千兆字节)的请求?直接上传是否也分块(如多部分上传)并在内部定义了大小


当我尝试使用S3RESTAPI执行PUT(直接上传)操作时,我可以上传的最大容量约为5GB,甚至Amazon也表示,他们对直接上传的最大限制是5GB。但是,当尝试上载大于限制的文件时,它会抛出一个异常“您建议的上载超出了允许的最大大小”,并且在头标记“transfer encoding”为“chunked”的位置返回一个HTTP响应

下面是从S3中随机选择的错误响应

< HTTP/1.1 412 Precondition Failed
< x-amz-request-id: 207CAFB3CEXAMPLE
< x-amz-id-2: EXAMPLE/DCHbRTTnpavsMQIg/KRRnoEXAMPLEBJQrqR1TuaRy0SHEXAMPLE5otPHRZw4EXAMPLE=
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Date: Fri, 23 Jun 2017 19:51:52 GMT
< Server: AmazonS3
<
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>...
Transfer-Encoding:chunked
response头仅表示错误响应主体S3正在发送回您,您将使用chunked-Transfer-Encoding

这与允许上载的内容无关,HTTP事务的任一方向(请求或响应)上是否存在
Transfer Encoding:chunked
,与它是否存在或是否支持相反方向无关

PUT
对象REST API调用不支持
请求上的
传输编码:chunked
。它需要请求头中的
内容长度:
,这就排除了使用分块传输编码的可能性

在标准上传中,HTTP层没有分块、阻塞等机制——没有有意义的内部结构“部分大小”,因为没有部分:它是一个连续的TCP流,由完全
内容长度
长度(八位字节数/字节)的未编码八位字节组成,通过TCP处理重试和网络错误,HTTP不知道这些机制

如果您发送的
内容长度
标题超过了允许的最大上载长度,则您会收到关于您建议的上载超过允许的最大大小的错误。如果在S3接收到
内容长度
八位字节数之前意外或有意断开连接,则上载的数据将被丢弃,因为不会创建部分对象