HttpClient.DefaultRequestHeaders.ExpectContinue是什么?它的作用是什么?它在什么情况下设置为true或false?

9

我一直在查阅代码,最近遇到了以下内容:

  private readonly HttpClient _client;
 _client = new HttpClient(clientHandler);
 _client.DefaultRequestHeaders.ExpectContinue = false;

msdn (https://goo.gl/IoZlB1)中关于ExpectContinue的信息不多。此外,msdn上的HttpRequestHeader枚举 (https://goo.gl/IoZlB1)将Expect描述为:

Expect标头,指定客户端所需的特定服务器行为。

我希望有人能解释一下ExpectContinue。它的目的是什么?如果设置为true或false会发生什么?

1个回答

13

继续状态主要用于首先发送请求标头,以查看服务器是否允许(接受)该请求。如果服务器响应为“OK”,则发送100-continue并且客户端将继续发送请求正文。否则,服务器会响应417(Expectation Failed)。

想象一下,您要上传一个1 GB的文件到服务器上的特定文件夹。如果直接开始传输并且服务器不接受大于512 MB的文件或文件夹不存在,则服务器将不会接受该文件,并且这种传输将浪费双方的资源。

请参阅W3C文档此处

见第8.2.3节使用100(Continue)状态


谢谢。始终进行 continue 检查是否是一个好的实践,还是仅在密集操作中必须使用? - NullReference
1
Expect continue 会增加额外的开销,因为它至少会导致一次额外的往返。它应该用于资源密集型操作,因此 ExpectContinue 的默认值我认为是 false。我有时看到 .Net 在 WCF 服务请求中发送这个,但不知道背后的动机。 - Oguz Ozgul
HTTP不知道任何文件夹,你在这里提供了错误的假设。 - Michael-O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接