TinyWebServer
TinyWebServer copied to clipboard
为什么write完成后,清空读缓冲区?
http_conn.h和http_conn.cpp中,如果read_once函数读取的数据跨越了前一个请求和后一个请求的HTTP报文,那么在调用write函数在某些条件下,调用了init()函数,清空了读缓冲区,那么后一个请求的一部分数据不就丢失了?
如果主线程中调用read_once,LT模式下只执行一次recv,读取到不完整的http请求,然后用http_conn::process(),process_read就会返回NO_REQUEST,表示请求不完整,继续监听EPOLLIN事件。
不会执行到write函数
如果read_once函数读取的数据跨越了前一个请求和后一个请求的HTTP报文...
在 HTTP 1.1 中,单个 TCP 连接同时只能处理一个请求,虽然存在 Pipelining 技术支持多个请求同时发送,但由于实践中存在很多问题无法解决,所以浏览器默认是关闭,所以可以认为是不支持同时多个请求。也就是说,请求和应答是串行的,一来一回,不会存在读取的数据跨越了前后两个请求的 HTTP 报文。 https://stackoverflow.com/questions/30477476/why-is-pipelining-disabled-in-modern-browsers/40688337#40688337