对localhost服务器的空白HTTP请求

时间:2014-06-10 18:35:11

标签: c# sockets webserver

我希望了解有关Web服务器的更多信息,因此我按照this tutorial on codeguru构建了一个示例服务器。但是,每当我运行它并加载默认页面时,我都会获得标准的GET http请求,然后接受另一个套接字连接,然后显示空白的http请求。控制台输出如下:

Web Server now listening on port 7070, press ^C to stop...
Socket Type: Stream

Client Connected!
=================
Client IP: 127.0.0.1:56310

Message received: "GET / HTTP/1.1
Host: localhost:7070
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  "
Directory requested: /
File Requested: C:\_WebServer\default.html
No. of bytes sent: 103
Total Bytes: 191
No. of bytes sent: 191
Socket Type: Stream

Client Connected!
=================
Client IP: 127.0.0.1:56311

Message received: "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                "
Only GET is supported :(

这是什么空白的http请求,为什么还有第二个套接字连接,即使我只是从浏览器发出一个请求?这是一种保持活力的东西吗?

编辑:这可能是超时的事吗?

Edit2:

我认为原因可能如下:

server socket receives 2 http requests when I send from chrome and receives one when I send from firefox

Chrome似乎做了一些"占位符"套接字请求以优化以后的传输。我在IE中也有这种行为,所以也许IE正在做类似的事情。

1 个答案:

答案 0 :(得分:0)

该代码有很多错误,我不建议任何人阅读它。最严重的是它希望通过一次操作发送和接收所有内容,这对于最琐碎的操作来说是正确的。

如果您想了解如何编写Web服务器代码,我建议您查看我的代码:https://github.com/jgauffin/Griffin.Framework/tree/master/src/Griffin.Framework/Griffin.Core/Net/Protocols/Http

它是在apache许可下发布的,我将HTTP协议解析与网络IO分开,希望比你链接的文章更容易理解。