我在Linux下使用C语言编写了一个简单的服务器,它在localhost上侦听端口80.现在,当我从浏览器google chrome向程序发送请求时,它收到2个请求,而当我从firefox发送时只收到一个请求.
我在浏览器中输入的URL是:http://localhost/xyz.html
当我在CHROME中输入URL时输出
root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL# ./DCMTOL_RUN
Inside HTTP server Handler
Inside HTTP request Handler
**Detected request: clientsocket_fd = 6 clientportnumber = 38027**
GET /xyz.html HTTP/1.1
Host: localhost
Connection: keep-alive
Cache-Control: max-age=0
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Inside HTTP request Handler
**Detected request: clientsocket_fd = 7 clientportnumber = 38029**
^C
root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL#
Run Code Online (Sandbox Code Playgroud)
第二个请求不发送任何数据,所以我的代码在读取调用时等待,所以我必须终止它'^ C'.
我在FIREFOX中输入URL时的输出
root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL# ./DCMTOL_RUN
Inside HTTP server Handler
Inside HTTP request Handler
**Detected request: clientsocket_fd = 6 clientportnumber = 45567**
GET /xyz.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
^C
root@anirudh-Aspire-5920:/home/anirudh/workspace/DCMTOL#
Run Code Online (Sandbox Code Playgroud)
问题:当我只输入一次URL时,Chrome浏览器如何发送2个请求(一个为空).如您所见,我检测到2个请求.我尝试在从chrome发送URL的情况下执行netstat,我发现这两个请求都是由浏览器发送的.当我从firefox发送URL时,你可以看到上面只收到1个请求.
这是我从chrome发送请求时net stat的输出
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 117.195.110.186:48701 74.125.77.102:80 TIME_WAIT -
tcp 0 0 117.195.110.186:48700 74.125.77.102:80 ESTABLISHED 5699/google-chrome
tcp 0 0 117.195.110.186:55815 209.85.175.138:80 ESTABLISHED 5699/google-chrome
tcp 0 0 127.0.0.1:80 127.0.0.1:38029 ESTABLISHED -
tcp 0 0 127.0.0.1:38029 127.0.0.1:80 ESTABLISHED 5699/google-chrome
tcp 0 0 127.0.0.1:38027 127.0.0.1:80 ESTABLISHED 5699/google-chrome
tcp 0 0 127.0.0.1:80 127.0.0.1:38027 ESTABLISHED -
tcp 0 0 117.195.110.186:35402 74.125.153.125:5222 ESTABLISHED 4430/pidgin
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
Mat*_*att 50
我的节点服务器遇到了类似的问题.这是由于Chrome中存在以下错误.总之,Chrome会根据每个请求发送一个favicon请求.因为,很可能,你没有发回一个favicon,它会在每个合法请求后请求一个.
Firefox和大多数其他浏览器在首次连接时也会发送一个favicon请求,但是缓存结果,即如果第一次没有返回favicon,他们就不会继续尝试 - 这就是为什么你只是看到来自Firefox的单个请求.不幸的是,Chrome有点过于持久以及它的favicon请求.
dav*_*dlt 17
我目前正在Mono/.NET 4.0上编写小型异步Web服务器并注意到了同样的事情.Chrome会打开两个 TCP连接,但只有一个用于通信.使用该套接字没有数据发送.即使您停止从浏览器加载网页,Chrome仍然会保持连接活动很长一段时间.
我必须同意@RomanK,因为它可能是为了优化或者它是一个错误,但它不适用于favicon,因为没有数据传输抛出该连接.
| 归档时间: |
|
| 查看次数: |
16503 次 |
| 最近记录: |