http - http请求和将http请求文本写入80端口上的tcp/ip套接字有什么区别

标签 http sockets

有人可以解释一下 HTTP 请求和它处理的 80 端口上的套接字请求之间的区别吗?据我了解,HTTP 服务器监听 80 端口,当有人在此端口上发送 HTTP 请求时,服务器会处理它。那么,当我们在端口 80 上放置套接字监听器,然后向其写入 HTML 格式的消息时,这是否意味着我们发送普通的 HTTP 请求?但正如 fiddler 所说 - 这是错误的。数据包级别有什么区别?或者 HTTP 请求和 HTTP 形式的套接字写入之间的另一个低于表示级别?谢谢。

最佳答案

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

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

只要您在套接字中发送有效的 HTTP 协议(protocol)(​​根据 RFC),数据包级别就不应该有差异(如果较低的网络堆栈相同)。

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

请注意,您自己实现 HTTP 时有一定程度的自由。有许多可选字段, header 的顺序并不重要。因此,两种不同的 HTTP 实现在数据包级别上可能会有所不同,但行为基本相同。

实际查看数据包级别发生的情况的最佳方法是使用网络嗅探器 - 例如wireshark或packetyzer。嗅探器实际上记录网络数据包并向您显示它们的内容。因此,如果您记录了多个 HTTP 实现(来自不同的浏览器)和您自己的套接字实现,则可以进行所需的更改以使它们在数据包级别上相同。

关于http - http请求和将http请求文本写入80端口上的tcp/ip套接字有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404360/

相关文章:

python - 如何在 Python 中提供 HTTP post 请求时在 Json 对象中传递变量

ios - 来自 iOS 的自定义 HTTP 请求被拒绝

c++ - 使用 boost::asio 的 HTTP POST 请求

ios - 如何在 iOS 上设置 UDP 的“不分段”标志?

java - 请求和响应互相阻塞

http - 通过 HTTP 调用的代码的 PHPUnit 代码覆盖率分析

java - Android中命令包含中文或空格时如何发送HTTP命令?

sockets - SOCKS和socket有什么关系?

python - 如何在python中从telnet连接接收数据

node.js - 如何通过socket.io将数据流传输到客户端