2011-12-06 41 views
3

有人可以解释80端口上HTTP请求及其处理和套接字请求之间的区别吗?据我了解,HTTP服务器监听80端口,当有人在这个端口发送HTTP请求 - 服务器处理它。所以,当我们将套接字侦听器放在端口80上,然后写入HTML格式的消息时 - 这是否意味着我们发送了通常的HTTP请求?但正如小提琴手所说 - 它是假的。数据包级别有什么不同?或者另一个低于演示文稿 - HTTP请求和HTTP写入套接字之间的级别?谢谢。http请求和写HTTP请求文本到80端口上的tcp/ip套接字有什么区别

回答

6

首先,端口80是HTTP的默认端口,不是必需的。您也可以让HTTP服务器在其他端口上侦听。

关于“常规”HTTP请求与您通过套接字创建的请求之间的区别 - 没有区别。您所指的“常规”HTTP请求(例如由Web浏览器制作)也通过套接字实现,就像您自己手动执行一样。服务器也是如此。 HTTP服务器的实现监听传入的套接字连接并解析通过那里的数据,就像你一样。

只要你发送你的套接字有效的HTTP协议(根据RFC),数据包级别应该没有区别(如果下层网络堆栈是相同的)。

请记住,套接字层只是HTTP数据始终传递的层。将数据放在那里并不重要,它只是以与放入数据相同的方式从另一侧出来。

请注意,您自己实现HTTP时有一定的自由度。有许多可选字段,标题的顺序无关紧要。所以有可能两个不同的HTTP实现在数据包级别上会有所不同,但其行为基本相同。

实际看到数据包级别发生了什么的最好方法是使用网络嗅探器 - 比如wireshark或packetyzer。嗅探器实际记录网络的数据包并向您显示其内容。因此,如果您记录多个HTTP实现(来自各种浏览器)和您自己的套接字实现,则可以进行必要的更改以使其在数据包级别保持一致。

+0

感谢您的回应并指向工具,尝试它们。你之前说过我的意思 - 那种格式良好的socket写入是http。我不写我自己的服务器=)我只是使用通过80端口上的套接字提供的一些API,并在一个http形式的请求响应中写入文本到套接字。我使用c#TcpClient对象来制作它。但只是我开始工作通过包装和美化HttpWebRequest对象 - 返回一个错误。而且 - 用TcpClient写作不会被追踪器追踪,追踪所有的http请求。所以再次感谢工具将尝试它们。 –

+0

是的..良好的形式写你在插座是完美的HTTP – talkol

+0

我有一些编辑在prev后,不熟悉stackowerflow还有 –