从Socket编程看HTTP服务器设计

从常用的telnet命令,了解Socket的设计和用途。

我们会经常使用telnet来测试一个ip上某个端口是否能够连得通,这里中间其实就是利用socket连接返回数据。


这里我们在linux服务器上输入telnet taobao.com 80命令后,得到了Connected to taobao.com的相应,说明了这样的一个连接是正常的,服务器返回了响应。

上面的一个大体的过程就是类似我们java中的socket,利用socket变成,连接到taobao.com 80的socketServer,如果能够连接,我们可以通过输入,继续发送消息,而如果socketServer对输入的信息有回复的话,则会继续返回信息显示在命令窗口。这里的socket其实就是通过TCP协议进行包装然后发送出去的。

而我们知道HTTP协议是在iso七层模型中的应用层,TCP协议是在传输层,HTTP协议是建立在TCP协议的基础上,所以底层上,HTTP的报文数据是通过socket发送出去的。这里就涉及到HTTP的请求和相应格式。HTTP请求报文主要由请求行、请求头部、请求正文3部分组成。第一行是请求行,包括请求方式,URL,协议的版本号,中间通过空格分割。接下来换行,是请求头信息,以key:value的格式,每个key value一行,一般会有User-Agent、Host、cookie和Accept-Encoding等。接下来是换行,是一个空行,标记请求头部信息结束。下面是具体的报文数据。而HTTP服务器也以这样的格式规范进行解析获取相应的数据。

这些数据都是通过socket连接发送出去的,服务器进行数据解析后,返回相应到命令行控制台显示,完成一个简单的请求过程。

对于curl命令,其实我们也可以大致观察到curl的一个实现方式,curl有很多的参数,这些参数也是用来组成http请求的一些必备的数据。而对于这样的实现,我们完全可以自己去实现一个这样的shell命令。

猜你喜欢

转载自blog.csdn.net/codingtu/article/details/78934462