Welcome to Snooda's Blog
curl耗时长问题-Expect: 100-continue
[| 2013/01/22 17:17]
最近发现有个问题,一个自制的webserver在应答前端请求时,总是要处理1s以上,似乎是由于哪里等待了1秒。研究了下发现:Expect: 100-continue这个东东。
100-continue这个状态码之前是很少遇到的。这个是http1.1协议为了提高效率设置的。当客户端要POST较大数据给webserver时,可以在发送http头时带上Expect: 100-continue,服务器如果接受这个请求,应答一个HTTP/1.1 100 Continue,那么客户端就继续传输正文,否则应答417,客户端就放弃传送剩余的数据了。这样就避免客户端吭哧吭哧传了一大堆数据上去,结果服务端发现不需要的情况。
libcurl在不同版本里逻辑不同,有的版本libcurl会在POST数据大于1024字节的时候发送100-continue请求,有的版本则不会。我们用到的libcurl版本会发送,而自制webserver不会应答这个请求,客户端等待1s钟没有收到肯定或否定的应答,还是继续传输了正文,虽然逻辑上并没有问题,但速度上就慢了下来。
加了下逻辑,对100-continue进行应答,速度马上提高很多。
100-continue这个状态码之前是很少遇到的。这个是http1.1协议为了提高效率设置的。当客户端要POST较大数据给webserver时,可以在发送http头时带上Expect: 100-continue,服务器如果接受这个请求,应答一个HTTP/1.1 100 Continue,那么客户端就继续传输正文,否则应答417,客户端就放弃传送剩余的数据了。这样就避免客户端吭哧吭哧传了一大堆数据上去,结果服务端发现不需要的情况。
libcurl在不同版本里逻辑不同,有的版本libcurl会在POST数据大于1024字节的时候发送100-continue请求,有的版本则不会。我们用到的libcurl版本会发送,而自制webserver不会应答这个请求,客户端等待1s钟没有收到肯定或否定的应答,还是继续传输了正文,虽然逻辑上并没有问题,但速度上就慢了下来。
加了下逻辑,对100-continue进行应答,速度马上提高很多。