多重响应在 HTTP 中合法吗?
Are multiple responses legal in HTTP?
我对 HTTP 协议的细微差别有点生疏,我想知道它是否可以直接支持 publish/subscribe?
HTTP 是一种请求响应协议。因此,客户端发送请求,服务器发回响应。
在 HTTP 1.0 中,每个请求都会建立一个新的连接。
现在 HTTP 1.1 改进了 HTTP 1.0,允许客户端保持连接打开并发出多个请求。
我知道您可以将 HTTP 连接升级到 websocket 以实现快速双向通信。我很好奇的是这是否绝对必要?
例如,如果我请求资源“http://somewhere.com/fetch/me/slowly”
服务器免费直接回复两次吗?
比如先用一个 202 accepted
然后在内容准备好后不久,
但是没有客户端先发送额外的请求?
即
Client: GET http://somewhere.com/fetch/me/slowly
Server: 202 "please wait..."
Server: 200 "here's your document"
这样实施 publish/subscribe 服务是否正确?
例如:
Client: http://somewhere.com/subscribe
Server: item 1
...
Server: item 2
我觉得这个 'might' 有效,因为客户端通常会有一个事件循环来监视连接,但在技术上是错误的(因为遵循协议的客户端不需要那样实现)。
但是,如果您使用 chunked transfer encoding 这会起作用。
HTTP/2 似乎也允许这样做,但我不清楚是否进行了某些更改以使其成为可能。
我没有看到关于 pub/sub 的太多讨论,所以如果使用带或不带分块编码的普通 HTTP/1.1 有什么问题怎么办?
如果这可行,为什么您需要 RSS 或 ATOM 之类的东西?
一个 HTTP 请求可以有多个 'responses',但响应都有 1xx
范围内的状态码,例如 102 Processing.
但是,这些回复只是 headers,不是正文。
HTTP/1.1(就像之前的 1.0)是一个 request/response protocol. Sending a response unsolicited is not allowed. HTTP/2 is a frames protocol which adds server push,它允许服务器建议提供额外的数据并并行处理多个请求,但不会改变它的 request/response 自然.
保持 HTTP 连接打开并继续发送更多数据是可能的。许多(音频、视频)流媒体服务都会用到这个。
但是,这看起来只是一个连续的 body 继续流式传输,而不是许多多个 HTTP 响应。
If this works why do you need things like RSS or ATOM
因为保持 TCP 连接打开不是免费的。
我对 HTTP 协议的细微差别有点生疏,我想知道它是否可以直接支持 publish/subscribe?
HTTP 是一种请求响应协议。因此,客户端发送请求,服务器发回响应。 在 HTTP 1.0 中,每个请求都会建立一个新的连接。 现在 HTTP 1.1 改进了 HTTP 1.0,允许客户端保持连接打开并发出多个请求。
我知道您可以将 HTTP 连接升级到 websocket 以实现快速双向通信。我很好奇的是这是否绝对必要?
例如,如果我请求资源“http://somewhere.com/fetch/me/slowly”
服务器免费直接回复两次吗? 比如先用一个 202 accepted 然后在内容准备好后不久, 但是没有客户端先发送额外的请求?
即
Client: GET http://somewhere.com/fetch/me/slowly
Server: 202 "please wait..."
Server: 200 "here's your document"
这样实施 publish/subscribe 服务是否正确? 例如:
Client: http://somewhere.com/subscribe
Server: item 1
...
Server: item 2
我觉得这个 'might' 有效,因为客户端通常会有一个事件循环来监视连接,但在技术上是错误的(因为遵循协议的客户端不需要那样实现)。
但是,如果您使用 chunked transfer encoding 这会起作用。
HTTP/2 似乎也允许这样做,但我不清楚是否进行了某些更改以使其成为可能。
我没有看到关于 pub/sub 的太多讨论,所以如果使用带或不带分块编码的普通 HTTP/1.1 有什么问题怎么办?
如果这可行,为什么您需要 RSS 或 ATOM 之类的东西?
一个 HTTP 请求可以有多个 'responses',但响应都有 1xx
范围内的状态码,例如 102 Processing.
但是,这些回复只是 headers,不是正文。
HTTP/1.1(就像之前的 1.0)是一个 request/response protocol. Sending a response unsolicited is not allowed. HTTP/2 is a frames protocol which adds server push,它允许服务器建议提供额外的数据并并行处理多个请求,但不会改变它的 request/response 自然.
保持 HTTP 连接打开并继续发送更多数据是可能的。许多(音频、视频)流媒体服务都会用到这个。
但是,这看起来只是一个连续的 body 继续流式传输,而不是许多多个 HTTP 响应。
If this works why do you need things like RSS or ATOM
因为保持 TCP 连接打开不是免费的。