HttpClient.DefaultRequestHeaders.ExpectContinue。 ExpectContinue 服务于啥目的以及在啥条件下将其设置为 true 或 false。
Posted
技术标签:
【中文标题】HttpClient.DefaultRequestHeaders.ExpectContinue。 ExpectContinue 服务于啥目的以及在啥条件下将其设置为 true 或 false。【英文标题】:HttpClient.DefaultRequestHeaders.ExpectContinue. What purpose does ExpectContinue serve and under what conditions is it set to true or false.HttpClient.DefaultRequestHeaders.ExpectContinue。 ExpectContinue 服务于什么目的以及在什么条件下将其设置为 true 或 false。 【发布时间】:2015-11-03 08:38:10 【问题描述】:我一直在浏览一些代码并且遇到过
private readonly HttpClient _client;
_client = new HttpClient(clientHandler);
_client.DefaultRequestHeaders.ExpectContinue = false;
msdn (https://goo.gl/IoZlB1) 没有包含太多有关 ExpectContinue 的信息。此外,msdn (https://goo.gl/IoZlB1) 上的 HttpRequestHeader Enumeration 将 Expect 描述为
Expect 标头,指定特定的服务器行为 是客户要求的。
我希望有人能对 ExpectContinue 有所了解。它的目的是什么,如果它是真的还是假的会发生什么?
【问题讨论】:
【参考方案1】:继续状态主要用于首先发送请求标头,以查看服务器是否会允许(接受)请求。如果服务器说 OK,它会发送 100-continue 并且客户端继续请求正文。否则,服务器响应 417(预期失败)。
假设您要将 1 GB 的文件上传到服务器上的特定文件夹。如果直接启动传输,服务器不接受大于512MB的文件或者文件夹不存在,服务器将不接受该文件,传输对双方都是资源的浪费。
查看 W3C 文档here
请参阅第 8.2.3 节使用 100(继续)状态
【讨论】:
谢谢。始终检查 continue 是否是一种好习惯,还是必须仅在密集操作中使用? Expect continue 当然有一个额外的负担,因为它会导致至少 1 次额外的往返。它应该用于资源密集型操作,因此我认为 ExpectContinue 的默认值无论如何都是错误的。我有时会看到。 Net 为 wcf 服务请求发送此消息,但不知道其背后的动机。以上是关于HttpClient.DefaultRequestHeaders.ExpectContinue。 ExpectContinue 服务于啥目的以及在啥条件下将其设置为 true 或 false。的主要内容,如果未能解决你的问题,请参考以下文章