2013-04-07 70 views
1

按照W3C specification on Server-Sent Events用于持久连接的HTTP分块的替代方法?

作者还告诫说,HTTP分块可具有关于该协议的可靠性意想不到的负面影响。在可能的情况下,应该禁用分块处理事件流,除非消息速率足够高,否则无关紧要。

我到底会在node.js中做这个服务器端?设置Content-Length标题并不是一个真正的选项,因为理想情况下,连接永远不会关闭。我会将响应标题Transfer-Encoding设置为identity还是完全删除Transfer-Encoding标题?

回答

2

如果您未明确提供长度或手动设置传输编码,节点将自动使用chunked编码。设置Connection: close也很好,因为在服务器完成发送事件后,显然不会保持连接打开状态。

res.setHeader('Transfer-Encoding', 'identity'); 
res.setHeader('Connection', 'close'); 
+0

但是连接无限期地保持开放,并设置'Connection'头'close'将立即关闭连接。 – 2013-04-07 05:04:32

+0

@MatthewDean'Connection:close'告诉浏览器在发送完所有数据后套接字将关闭,这正是会发生的事情。这并不意味着它会立即关闭。它将一直保持打开状态,直到服务器调用'res.end()'。如果您没有明确提供长度或使用传输编码,则浏览器唯一可以知道服务器不会有更多数据的方式是关闭连接。 – loganfsmyth 2013-04-07 05:07:34

+0

啊。在一个不相关的说明中,你是否清楚为什么分块编码对于Server-Sent Events来说不太可靠? – 2013-04-07 05:17:38