http协议

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.详述三次握手和四次挥手过程?

三次握手:

  1. 建立连接时,客户端发送SYN包到服务器
  2. 服务器收到请求后,会向客户端发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
  3. 客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手

四次挥手:

  1. 首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认
  2. 服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。
  3. 关闭服务器到客户端的连接,发送一个FIN给客户端
  4. 客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,才进入CLOSED状态。
  5. 服务器只要收到了客户端发出的确认,当前连接立即进入CLOSED状态。

3.为什么TIME_WAIT状态需要经过2*MSL(最大报文段生存时间)才能返回到CLOSE状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

4. HTTP协议状态码有什么用,列出你知道的 HTTP 协议的状态码

通过状态码告诉客户端服务器的执行状态,以判断下一步该执行什么操作。 常见的状态机器码有:

  1. 100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
  2. 200-299:表示服务器成功接收请求并已完成处理过程,常用200(OK请求成功)。
  3. 300-399:为完成请求,客户需要进一步细化请求,如302(所有请求页面已经临时转移到新的url),304、307(使用缓存资源)。
  4. 400-499:客户端请求有错误,如常用404(服务器无法找到被请求页面),403(服务器拒绝访问,权限不够)。
  5. 500-599:服务器端出现错误,常用500(请求未完成,服务器遇到不可预知的情况)

7. HTTP常见请求头?

  1. Host(主机和端口号)
  2. Connection(链接类型)
  3. Upgrade-Insecure-Requests(升级为HTTPS请求)
  4. User-Agent(浏览器名称)
  5. Accept(传输文件类型)
  6. Referer(页面跳转处)
  7. Accept-Encoding(文件编解码格式)
  8. Cookie (Cookie)
  9. x-requested-with:XMLHttpRequest (是Ajax异步请求)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值