http 规范:等待创建 "file"

http spec: Wait for creation of "file"

是否有与 http 相关的规范可以帮助我实现 "wait for creation of file"?

这里是应该实现的:

  1. 名为 "sink" 的服务器连接到服务器 "middle" 并等待此服务器上的文件创建
  2. 服务器 "creator" 创建文件并将其发送到服务器 "middle"
  3. 只要整个文件在服务器 "middle" 上可用,服务器 "sink" 就应该开始下载。

我知道我可以使用 websockets 和自定义方法来实现它。

但在采用这种方式之前,我想知道是否有涵盖此用例的 http 相关规范。

简答

是的,HTTP 规范本身 (RFC7230) 已经涵盖了您的用例 RFC6202 中还描述了一种称为 HTTP 长轮询的已知机制 服务器在返回响应之前等待数秒的位置。

长答案

HTTP 是一种灵活的协议,以至于 HTTP 规范本身 (RFC7230) 已经涵盖了您的用例。 在 Section 1 中(强调我的):

HTTP is a generic interface protocol for information systems. It is designed to hide the details of how a service is implemented by presenting a uniform interface to clients that is independent of the types of resources provided. Likewise, servers do not need to be aware of each client’s purpose: an HTTP request can be considered in isolation rather than being associated with a specific type of client or a predetermined sequence of application steps. The result is a protocol that can be used effectively in many different contexts and for which implementations can evolve independently over time.

规范允许服务器连接到其他服务器并等待某些东西(“隐藏服务实现方式的细节”) 并且某些东西可以是文件或其他任何东西(“独立于所提供资源的类型”)。

您应该注意到该规范没有定义服务器的内部工作原理。 它没有定义服务器必须做什么才能提供响应,如 Section 1(强调我的)中所述:

One consequence of this flexibility is that the protocol cannot be defined in terms of what occurs behind the interface.

在您的用例中,服务器“sink”实际上是一个客户端,因为它连接到服务器“middle”并期望接收文件。 服务器“中间”正在等待另一台服务器做某事这一事实是无关紧要的,因为规范没有定义接口后面应该发生什么。

但是,如果您正在寻找服务器也等待某些东西的类似机制, 一个示例是 RFC6202(强调我的)中描述的 HTTP 长轮询:

HTTP Long Polling: The server attempts to "hold open" (not immediately reply to) each HTTP request, responding only when there are events to deliver.

在HTTP Long Polling中,服务器在收到客户端的请求后,不会立即回复(“not immediately reply to”)。 它只是等待事件发生。 服务器可以等待多长时间甚至都没有定义。 此机制在 HTTP 工作方式的范围内工作,因此符合 HTTP 规范。