3.2.1-3.4.11 http协议及Web服务器实现

HTTP协议是浏览器和服务器之间的传输协议,是在网络上传输HTML的协议,用于浏览器和服务器的通信。

1、 HTTP格式
每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。

HTTP协议是一种文本协议,所以,它的格式也非常简单。

1.1 HTTP GET请求的格式:
GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
每个Header一行一个,换行符是\r\n。

1.2 HTTP POST请求的格式:
POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

1.3 HTTP响应的格式:
200 OK
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。

Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

2、Epoll实现Web服务器并发

select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。

它的基本原理就是select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。不需要像非堵塞程序需要不停询问,同时应用程序和操作系统共享一个储存空间的方式,可以减少套接字在应用程序和操作系统的不断储存和读取所耗费的时间,效率大大提高。

3、Web静态服务器-gevent版
协程模式,需要在程序中添加补丁monkey.patch_all()

4、网络通信过程
网络通信的步骤:
1)在浏览器中输入一个网址时,需要将它先解析出ip地址来
2)当得到ip地址之后,浏览器以tcp的方式3次握手链接服务器
3)以tcp的方式发送http协议的请求数据 给 服务器
4)服务器tcp的方式回应http协议的应答数据 给浏览器

网络通信过程所涉及的各种设备总结:
MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的序列号)
IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的序列号)
网络掩码:用来区分ip地址的网络号和主机号
默认网关:当需要发送的数据包的目的ip不在本网段内时,就会发送给默认的一台电脑,成为网关
集线器:已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵
交换机:集线器的升级版,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播
路由器:连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化
DNS:用来解析出IP(类似电话簿)
http服务器:提供浏览器能够访问到的数据

你可能感兴趣的:(python基础)