不空“的期待:”头意味着什么?(Does empty “Expect:” header mean a

2019-08-07 19:17发布

许多图书馆包括Expect: 100-continue对所有HTTP POST 1.1,默认情况下PUT请求。

我打算通过删除对减少延迟时间100继续对那些我知道发送数据马上为代价小于等待往返的请求的客户端装置100-继续,即短的请求。

当然,我还是希望HTTP 1.1的所有其他伟大的功能,因此,只有我要杀了Expect: 100-continue头。 我有两个选择:

  • 除去期望完全头,或
  • 发送空想到头, Expect:\r\n

是否有过两者之间有什么区别?

这可能打破一个或其他任何软件?

Answer 1:

如果你删除任何内容都不突破Expect头,但我知道,微软的IIS已经有问题与100 Continue过去。 例如, IIS5总是发送100继续响应 。 所以,我不知道,至少它的一些在图书馆的用途可能是解决类似的破碎行为中的服务器。

许多图书馆似乎设置这个标题,然后没有真正处理100 Continue正常-例如,他们立即开始发送请求主体,而无需等待100 Continue ,然后不处理的事实,之前的服务器可能发回任何HTTP错误代码他们已经完成发送请求体(第一部分的确定,它的第二部分,它被打破 - 看到后来在我的答案)。 这使我相信,一些作者刚刚从其他地方拷贝它没有完全理解的细微之处 。

我看不到任何理由包括一个空白Expect头-如果你不打算包括100-continue (或其他一些Expect条款),则完全忽略了头。 唯一的原因有这将是解决网络服务器打破,但我不知道有任何它们的行为以这种方式。

最后,如果你只是希望减少往返延迟,在我看来,它不会实际上是符合RFC简单地开始立即发送请求主体。 你不应该无限期等待,以发送请求体(根据在RFC ),所以你对行为规范-它只是你的超时之前发送反正是零。

你必须知道,服务器是自由地不发送100 Continue响应如果他们已经收到了一些请求主体的,所以你必须处理其发送服务器100 Continue ,那些没有任何响应,并等待完整的请求和那些立即发出任何HTTP错误代码(可能是417,但更可能的通用4XX代码)。 这样一来,你的短请求不应该有任何的开销(除了Expect头),但你将不必等待100 Continue 。 当然,这种方法的工作,你需要的方式,它可以让你只要服务器返回错误代码中断请求做的事情(如非阻塞IO与poll()select()

这样做,让可能有助于保持你的代码,小型和大型请求之间更加一致,同时减少了等待时间。 不足之处是,它也许不是RFC作者心中有什么,即使它并没有明确违反任何规定。 此外,它可能使你以后的代码变得更加复杂,如果你不是已经做非阻塞IO或相似。



文章来源: Does empty “Expect:” header mean anything?