【问题标题】:Sending HTTP 1.0 request to avoid handling chunks发送 HTTP 1.0 请求以避免处理块
【发布时间】:2015-11-16 23:03:11
【问题描述】:

我的问题:

发送 HTTP 1.0 GET 请求以避免分块响应是否安全? 所有现代 Apache/NGinx 安装都可以很好地处理我的 HTTP 1.0 请求吗?

一些上下文:

我正在开发一个超级简单的 Http 客户端。 该客户端应该从某些给定的服务器获取超级简单的数据(1 到 10 个字符作为响应)。

我控制用于响应这些简单数据的 PHP 脚本,但不控制服务器或站点配置。

我想让它尽可能简单,并避免解析分块响应。 (基于 C 语言,基于 Arduino 系统)

谢谢。

【问题讨论】:

  • SF 上的 This question 似乎是相关的。
  • 您可以将 Host: server[:port] 标头添加到 HTTP 1.0 请求中,以帮助解决以下 cmets 中提出的一些问题。

标签: apache http web nginx chunked


【解决方案1】:

真的,答案与某些 Web 服务器是否支持 HTTP 1.0 无关,这取决于网站是否支持。

使用 HTTP 1.0 没有标头,包括主机标头,因此没有虚拟主机功能(每个 IP 地址一个网站)。

因此,任何在单个 IP 上具有多个域/主机名的网站都需要 HTTP/1.1“主机”标头才能正常工作。

因此,如果您希望您的客户使用任意网站,不,您不能这样做,它不会适用于所有网站。

如果有特定的网站,那么……您可以测试这些网站,看看它们是否会接受 HTTP 1.0 请求,是否支持将取决于网络服务器及其配置。

您必须接受,如果您有一组特定的目标网站可以运行,它们可能会在以后停止运行,请记住。

编辑(在问题编辑之后):

由于您控制服务器端 PHP,因此您可以控制内容,但仍然不能控制 Web 服务器的行为。您的主机可能仅在您的主机/域名指向的 IP 地址处提供您的 Web 内容/网站,在这种情况下,HTTP 1.0 可能工作......但如果有多个主机/域名托管在一个 IP 上通过网络服务器,那么它几乎肯定不会工作,如果它在任何一种情况下都可以工作,那么它可能会在以后停止工作。

【讨论】:

  • 虽然你的答案是正确的,但它并没有回答 OP 专门关于分块编码的问题......
  • 嗯,如果我理解 OPs 的问题,分块编码是无关紧要的,除非 OP 想要避免实现它,他们建议使用 HTTP 1.0 来实现,而实际问题是因此“可以使用 HTTP 1.0 吗?”我无法回答这个问题,因为 OP 没有声明目标网站是否为已知集合,所以我通过解释 HTTP 1.0 不起作用的可能原因等来回答。当然,如果我误解了这个问题,那我道歉……
  • 查看我提到的问题 - 根据相关 rfcs,即使问题使用 1.0,服务器也可以使用 1.1 完美回答 - 尽管 cmets 似乎建议至少 nginx 会响应 1.0 请求使用 1.1 但没有 1.1 的特定功能,例如分块。不幸的是,这种行为不是强加的,并且 - 正如您正确指出的那样 - 通过使用 1.0,您失去了处理基于名称的虚拟主机的可能性。
  • @Michael : 我刚刚编辑了标题并添加了一些上下文。
  • @fvu 哈哈,有趣的是,我以前没有观察到这种行为,但也许并不奇怪,因为这些天我们多久发出一次 HTTP 1.0 请求?我对 RFC 的快速浏览让我怀疑它是否真的是 HTTP 1.1 响应,但它更像是 1.0 响应,并邀请客户端在将来发出 1.1 请求(如果可以的话)。但是,我想 OPs 方法在技术上仍然有效,1.0 请求不会得到分块响应,而且据我所知,我的答案仍然很好(只是根据 OPs 问题编辑进行了编辑)。不过很有趣,谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-02-15
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多