据我所知,Telnet是一种协议,与HTTP一样多.我有这样的想法,即在建立初始TCP连接之后,Telnet客户端会将一些特定于telnet的代码发送到另一端的服务器,在这种情况下是HTTP服务器.但由于HTTP服务器不了解Telnet特定代码,它应该抛出错误或丢弃连接等.但实际上,如果我们输入正确的HTTP标头并发送它们,我们可以telnet到HTTP服务器并获取页面.怎么会这样?维基百科条目真的没有帮助我理解这个具体点.(http://en.wikipedia.org/wiki/Telnet#Telnet_data)
Telnet只是一种轻松的交互式方式,可以打开到侦听套接字的TCP连接。由于telnet客户端盲目地将您键入的内容发送到该套接字,因此理论上它可以模拟TCP之上的任何其他协议。实际上,不可打印字符由键盘驱动程序解释这一事实是唯一的限制。
HTTP不使用不可打印的字符,只是用两个连续的“换行符”(即“空白行”)在HTTP标头和正文之间定界。
请注意,这里我不是在谈论HTML主体标签,而是有效载荷(例如SOAP主体)。
基本上没有魔术。
让我们看看事物的动态。
HTTP支持许多命令,例如GET,POST,PUT等。每个命令都有其语法,并且具有关联的响应,约定的语法和定义良好的错误代码。当使用telnet连接到HTTP服务器时,打开套接字连接,服务器派生一个线程来管理与客户端的对话框。然后,您可以通过键入浏览器将发送的命令来模仿浏览器。每次您按下CR键时,客户端都会将该行提交给服务器。如果命令包含多行,则可以输入多行,每行对应于命令标题的一行。一旦您连续击中两个CR(即空行),服务器便会认为命令头已完成,并且响应将放在一起并发送回客户端。因为一个远程登录客户端 人生目标是回显收到的字符(除非另有说明),然后您可以在终端窗口中看到响应标题和正文。Telnet在那里停止。浏览器将呈现HTML(如果响应是HTML页面)。
我希望这一切都可以澄清。
你是对的说telnet是它自己的协议,在几个RFC中有描述.您可以查看维基百科以查看哪些内容以及解释该协议的其他资源.
基本上它的工作方式如下:当您使用telnet连接到服务器时,它将显示服务器发送给您的每个可打印字符.您输入的所有内容都将被发送回服务器.这是连接到Web服务器时检索网页的方法:发送http服务器接受的命令并获得正确的结果.
现在,有一些telnet细节选项.IIRC,除非服务器首先发送它们,否则不会将它们发送到服务器.这些选项用于启用/禁用本地回显(考虑密码,您不希望登录时看到密码),协商终端大小,协商行尾类型.这些是几个字节长的命令,以字节255开头(称为IAC,解释为命令).当您连接到telnet服务器时,您的客户端将解释这些并相应地进行回复,所有这些都在后台自动进行,而不会向您显示这些命令.
虽然不是特定于telnet,但telnet服务器也可以发送ANSI转义序列.那些用于颜色,粗体,光标定位,...一个telnet客户端也将解释它们(或者只是将它们传递给你正在使用的终端模拟器,如xterm).
如果你想要比telnet"更低级"的东西,它不会解释telnet选项并实际显示你得到的东西,你可能想看看netcat