libuhttpd
libuhttpd copied to clipboard
可否支持 header 和 body 使用两个 buffer
当前 header 和 body 用的是一个 struct buffer wb, 发送响应时要先发header,再发body.
一个 handler 在刚开始可能并不能确定是要返回 200, 还是 500, 在执行过程中会有输出, 这时只能用一个临时 buffer 来缓存这些输出, 当能确定返回状态码后, 先 send headers, 再把这个临时 buffer 的内容 append 到 wb 里,导致内存用量 x2.
比如:
// 一些逻辑产生输出
struct buffer tmp;
buffer_put_data(&tmp, "xxx", 3);
// 执行到这里发现出错了
if (error) {
buffer_free(&tmp);
conn->send_error(...)
} else {
conn->send_head(conn, HTTP_STATUS_OK, ...)
conn->end_headers(conn);
conn->send(conn, buffer_data(&tmp), buffer_length(&tmp));
buffer_free(&tmp);
}
header 和 body 使用两个 buffer 的话, 可以把 body buffer 通过接口让 handler 可以把数据缓存进去, conn->send() 时先发 header buffer, 再发 body buffer.