python网络编程
0. http协议
http协议是浏览器和网站之间进行数据交流的方式
两大部分:请求部分、响应部分
请求部分:
请求行
GET / HTTP/1.1
请求头
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
请求体
name:xxx
pwd:xxxx
复制代码
响应部分:
响应行
HTTP/1.1 200 OK
响应头
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Sun, 30 Dec 2018 02:34:03 GMT
Expires: Sun, 30 Dec 2018 02:34:03 GMT
Server: BWS/1.1
响应体
<!DOCTYPE html>
<!--STATUS OK-->
html标签
复制代码
1. 简述TCP和UDP的区别以及优缺点?
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。
- 优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送
- 缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数 据是否会正确接收,也不重复发送,不可靠。
TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手
- 优点:TCP在数据传递时,有发送应答、超时重传、阻塞等控制机制,能保证数据正确性,较为可靠。
- 缺点:TCP相对于UDP速度慢一点,要求系统资源较多。
2.详述三次握手和四次挥手过程?
三次握手:
- 建立连接时,客户端发送SYN包到服务器
- 服务器收到请求后,会向客户端发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
- 客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手
四次挥手:
- 首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认
- 服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。
- 关闭服务器到客户端的连接,发送一个FIN给客户端
- 客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,才进入CLOSED状态。
- 服务器只要收到了客户端发出的确认,当前连接立即进入CLOSED状态。
3.为什么TIME_WAIT状态需要经过2*MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
4. HTTP协议状态码有什么用,列出你知道的 HTTP 协议的状态码
通过状态码告诉客户端服务器的执行状态,以判断下一步该执行什么操作。 常见的状态机器码有:
- 100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
- 200-299:表示服务器成功接收请求并已完成处理过程,常用200(OK请求成功)。
- 300-399:为完成请求,客户需要进一步细化请求,如302(所有请求页面已经临时转移到新的url),304、307(使用缓存资源)。
- 400-499:客户端请求有错误,如常用404(服务器无法找到被请求页面),403(服务器拒绝访问,权限不够)。
- 500-599:服务器端出现错误,常用500(请求未完成,服务器遇到不可预知的情况)
7. HTTP常见请求头?
- Host(主机和端口号)
- Connection(链接类型)
- Upgrade-Insecure-Requests(升级为HTTPS请求)
- User-Agent(浏览器名称)
- Accept(传输文件类型)
- Referer(页面跳转处)
- Accept-Encoding(文件编解码格式)
- Cookie (Cookie)
- x-requested-with:XMLHttpRequest (是Ajax异步请求)