是或否:服务器是否可以发送HTTP响应,同时仍然从相关的HTTP请求上传文件?

sma*_*man 2 forms ajax file-upload xmlhttprequest http-post

如果网站用户提交的HTML表单包含:(1)post方法; (2)multipart/form-data enctype; 并且,(3)一个大的附加文件,服务器可以上传一个发布的文件,并在文件上传完成之前发送服务器生成的HTTP响应,而不使用AJAX吗?

那非常密集.所以,我写了一个例子来说明我的意思.假设有一个带有标题字段的图像上传表单.

  <form action="upload-with-caption/" method="post" enctype="multipart/form-data">
    <input type="hidden" id="hiddenInfo" name="hiddenInfo" />
    File:     <input type="file" name="imgFile" id="imgFile" /><br />
    Caption:  <input type="text" name="caption" id="caption" />
        <input type="submit" />
  </form>
Run Code Online (Sandbox Code Playgroud)

我想将标题存储在具有定义的数据库表中:

[files_table]

  • file_id [uniqueidentifier]
  • file_caption [varchar(500)]
  • file_status [int]

然后我想上传文件/root/{unique-id}/filename.ext.

file_status映射到C#枚举,具有以下定义:

enum  FileUploadStatus{
    Error = 0,
    Uploading = 1,
    Uploaded = 2
}
Run Code Online (Sandbox Code Playgroud)

当表单提交时,如果文件太大而无法在1秒内处理,我想向网页发回一个回复,说明它当前正在上传.

我可以使用单个同步HTTP帖子执行此操作吗?

注意:我显然希望稍后使用AJAX检查状态更新,但这不是这个问题所要求的.我特别询问在发送响应后文件是否可以继续上传.

SLa*_*aks 6

HTTP是一种同步协议.
在收到整个请求之前,您无法发送回复.

  • 这并不完全正确。您当然可以在收到单个响应之前发送多个请求:http 流水线。http://en.wikipedia.org/wiki/HTTP_pipelining 我相信您也可以在收到请求标头后发送响应,但请求正文仍在途中。如果您开始发送响应正文,预计尚未到达的请求,您只会遇到麻烦。 (2认同)