Web services 接收Expect标头时是否应修改状态?

Web services 接收Expect标头时是否应修改状态?,web-services,rest,http,http-headers,Web Services,Rest,Http,Http Headers,我正在编写一个RESTful API,其中包含一个用于放置潜在大文件的资源,例如:/file?jobid=1。一些头元数据将与PUT请求一起发送,如: Content-Type: text/csv Content-Encoding: gzip Content-MD5: GJ0EGJ408J984558GJOTGKR Transport-Encoding: chunked Content-Length: 12345 Expect: 100-continue Body: <FileData&

我正在编写一个RESTful API,其中包含一个用于放置潜在大文件的资源,例如:
/file?jobid=1
。一些头元数据将与
PUT
请求一起发送,如:

Content-Type: text/csv
Content-Encoding: gzip
Content-MD5: GJ0EGJ408J984558GJOTGKR
Transport-Encoding: chunked
Content-Length: 12345
Expect: 100-continue

Body:
<FileData>
内容类型:文本/csv
内容编码:gzip
Content-MD5:GJ0EGJ408J984558GJOTGKR
传输编码:分块
内容长度:12345
预期:100人继续
正文:
因为我的文件很大,所以我提供了,这样客户端就可以要求服务器在发送正文之前确保它已经准备好接受请求

出于跟踪目的,我想在元数据记录中记录其中的一些内容(如内容类型、大小和MD5),并将它们与传递到请求中的
作业关联起来。我可以在相关的
/files/
集合中执行此操作,其中要求客户端首先执行此操作,然后在
放置期间提供
文件
对象的ID

RFC和其他人似乎没有具体说明在这次交流中可能发生的事情。就那样

ExpectRequestHeader字段用于指示客户端需要特定的服务器行为

我的问题是:


在将
100
417
响应发送回客户端之前,允许服务器创建/更新存储的元数据记录是否合适/可以?

我认为在您首先收到客户端的完整请求之前,创建/更新任何内容都没有意义。如果客户端在接收到完整的正文之前断开连接怎么办?或者在接收数据时内存/磁盘出现故障
Expect:100 continue
只是一种网络优化,因此不会不必要地传输请求正文。一般来说,处理请求不需要它。在收到完整的正文之前,请求不会完成,然后创建/更新您需要的任何内容。如果您在接收请求时创建了一些内容,但请求失败,请确保删除您创建的任何内容。我明白您的意思。那么,如果元数据被缓存或其他东西,直到请求完成,然后它才被持久化呢。这听起来更合理吗。