如果我使用块编码,我应该逐块发送 http 数据吗?
Should I send http data chunk by chunk if I use chunk encoding?
我理解 HTTP chunk 是这样的
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
服务器向客户端发送响应数据时,服务器是否应该逐块发送数据?
例如,
server ==> client,先发送headers,再发送chunk:
7\r\n
Mozilla\r\n
然后是第二块,以此类推。
服务器能否发送如下数据:
第一个write
7\r\n
Mozill
秒write
a\r\n
9\r\n
Developer\r\n
7\r\n
等等?
TCP 是一种传输字节流的协议。不同 write
发送的数据之间在 TCP 级别没有相关边界。事实上,如果你在彼此之后不久执行多个 write
或 send
来自这些调用的数据通常会在同一个网络数据包(Nagle algorithm)中一起结束并且它们也会一起读取接收者结束。
这意味着,如果您编写 3\r\n
后跟 123\r\n
之类的部分块而不是完整块 3\r\n123\r\n
应该无关紧要。您甚至可以在单个 write
或 send
中写入多个块或 1.5 个块等。
但还要注意,总是有一些客户端,开发人员没有正确理解套接字和 TCP 的工作原理,并假设您 send
就是您 recv
的,或者假设他们总是会得到具有单个 recv
或具有类似错误假设的完整块。虽然您可能会尝试对这些损坏的应用程序表现得很好,但您也可能会故意尝试破坏这些应用程序,以便它们及早得到修复,而不是稍后显示随机和不可重现的问题。
我理解 HTTP chunk 是这样的
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
服务器向客户端发送响应数据时,服务器是否应该逐块发送数据?
例如,
server ==> client,先发送headers,再发送chunk:
7\r\n
Mozilla\r\n
然后是第二块,以此类推。
服务器能否发送如下数据:
第一个write
7\r\n
Mozill
秒write
a\r\n
9\r\n
Developer\r\n
7\r\n
等等?
TCP 是一种传输字节流的协议。不同 write
发送的数据之间在 TCP 级别没有相关边界。事实上,如果你在彼此之后不久执行多个 write
或 send
来自这些调用的数据通常会在同一个网络数据包(Nagle algorithm)中一起结束并且它们也会一起读取接收者结束。
这意味着,如果您编写 3\r\n
后跟 123\r\n
之类的部分块而不是完整块 3\r\n123\r\n
应该无关紧要。您甚至可以在单个 write
或 send
中写入多个块或 1.5 个块等。
但还要注意,总是有一些客户端,开发人员没有正确理解套接字和 TCP 的工作原理,并假设您 send
就是您 recv
的,或者假设他们总是会得到具有单个 recv
或具有类似错误假设的完整块。虽然您可能会尝试对这些损坏的应用程序表现得很好,但您也可能会故意尝试破坏这些应用程序,以便它们及早得到修复,而不是稍后显示随机和不可重现的问题。