网络编程
位置:首页>> 网络编程>> Python编程>> 基于Python编写一个简单的http服务器

基于Python编写一个简单的http服务器

作者:真的不能告诉你我的名字  发布时间:2022-04-08 21:07:39 

标签:Python,http,服务器

本篇文章的python版本为:

基于Python编写一个简单的http服务器

什么是http

http是一个应用层协议,准确的来说是基于TCP/IP4层网络协议中的传输层中的TCP应用层协议。

额,4层模型大概是这样的:

基于Python编写一个简单的http服务器

在网络通信中,用户的数据是以报文来传输的,但是在实际通信中,每一层都会对包进行封装,从而形成段、数数据报、帧,最后是以比特流(二进制)进行传输,到了目标主机后,会对每一层又进行拆解,从而得到最后的报文。

http就在最上层,就是应用层那里。

http到底离我们多近呢? 甚至于你现在看到的文章,使用的就是http协议,它还有一个名字,叫做超文本传输协议,为什么叫超文本呢? 因为最开始的是时候,http是被用来传输Hypertext文档的,所以被叫做超文本协议,当然现在可以传输其他类型的数据,如: 视频、音频、图片等,但是它依然被称之为超文本协议。

很难理解吧,没关系,继续往下看。

分析http请求报文和响应报文格式

通过上面的简介,我们知道http是应用层协议,它在网络协议中,是被称之为报文的,让我们来看一下http的请求报文 和 响应报文吧。

http报文由4部分组成,分别是起始行、首部行、空白行 以及 实体组成。以\r\n(也称之为CRLF)进行分割。

让我们来看一下实际的报文呢。

linux中,我们可以使用curl -v 网址来打印详细的请求信息,其中就包括了报文。

命令:

curl -v http://juejin.cn

请求信息:

基于Python编写一个简单的http服务器

其中输出的结果中> 代表我们发出的报文,而< 代表服务器发送给我们的响应信息。下面我们将结合报文来看上面的数据信息。

请求报文格式如下:

基于Python编写一个简单的http服务器

其中请求行会指定http的请求方法,如: GETPOSTHEAD等, URL则是请求的文件路径,协议版本需要指定http的版本,最后是以CRLF结束。

首部行可以有多个,以 (字段名: 值) 的方式出现,每一个首部行同样是以CRLF结束。

而后是空行。空行则代表http报文头结束了,接下来该是发送的报文主体了,接下来,我们将上述请求http://juejin.cn的例子,填入表格来看下:

基于Python编写一个简单的http服务器

上述是我们使用curl工具请求的http://juejin.cn请求报文整体形式,我们可以看到,我们使用了GET方法,获取服务器的/信息,使用的协议是HTTP/1.1,而后携带了3个首部行,分别是User-AgentHost以及Accept

响应报文格式如下:

基于Python编写一个简单的http服务器

将响应报文和请求报文进行对比,我们不难发现,除了第一行以外,其他的格式都是一样的,所以,我们仅介绍响应行的信息,在响应报行中,第一个是协议的版本,这个是服务器的协议版本,而后便是状态码,用于告知客户端,服务器响应的信息,最后是短语,短语的作用是告知使用者,这个返回信息大概是什么意思。

来源:https://juejin.cn/post/7225623397145116732

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com