Expect: 100-continue
我正在使用 ASP.NET MVC 实现一个 REST API,并且以请求标头的形式出现了一个小绊脚石,用于带有帖子正文的请求。
RFC 2616指出:
在接收到一个包含“100-continue”期望的 Expect 请求头字段的请求时,源服务器必须要么以 100(继续)状态响应并继续从输入流中读取,要么以最终状态码响应。源服务器在发送 100(继续)响应之前不能等待请求正文。如果它以最终状态码响应,它可以关闭传输连接,或者它可以继续读取并丢弃请求的其余部分。如果它返回一个最终状态码,它绝不能执行请求的方法。
这听起来像是我需要对请求做出两个响应,即它需要立即发送一个 HTTP 100 Continue 响应,然后继续从原始请求流(即HttpContext.Request.InputStream
)读取而不结束请求,然后最终发送结果状态码(为了论证,假设它是 204 No Content 结果)。
所以,问题是:
- 我是否正确阅读规范,我需要对请求做出两个响应?
- 这如何在 ASP.NET MVC 中完成?
wrt (2) 在继续读取输入流之前,我尝试使用以下代码...
HttpContext.Response.StatusCode = 100;
HttpContext.Response.Flush();
HttpContext.Response.Clear();
...但是当我尝试设置最终的 204 状态代码时,我得到了错误:
System.Web.HttpException:发送 HTTP 标头后服务器无法设置状态。