4.10 python爬虫之——认识http协议

4.10 python爬虫之——认识http协议

清华镜像 (python安装库使用):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

1.HTTP协议的概念

http=Hyper Text Transfer Protocol(超文本传输协议)

http是应用层协议

全世界范围内通用

HTTP永远是客户端发起请求,服务器回送响应

无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

同一个客户端的这次请求和上次请求之间没有对应关系。

HTTP——>无状态单向的协议

纯文本协议=我们直接传递纯文本就可以了(一个web服务器就是约定好的方法生成对应的HTTP消息内容,然后传递给对方)

2.HTTP协议的格式

简单快速:只需要传递请求方法和路径

灵活:http可以传递任意类型的数据对象。通过content-type指定

无连接: 每次连接处理一个请求,服务器返回之后断开连接,节省传输时间和服务器压力。

无状态:协议对于食物处理没有记忆能力,需要通过cookie和session来加以区别。

支持B/S,C/S

格式:在这里插入图片描述

4-13python爬虫之——课后作业

1.TCP协议的三次握手和四次挥手的过程

首先我们得先了解一下TCP的特性:

提供一种面向连接的、可靠的字节流服务
在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP
TCP使用校验和,确认和重传机制来保证可靠传输
TCP给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。(来自慕课)

三次握手:指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。

​ 三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。
第一次握手(SYN=1,seq=x):
​ 客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序列X,保存在包头的序列号字段里面。发送完毕后,客户端进入SYN_SEND状态。
第二次握手
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
第三次握手
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。
在这里插入图片描述
在这里插入图片描述

四次挥手

​ TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。
第一次挥手:

​ 服务器端确认客户的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包后,进入FIN_WAIT_2状态,等待服务器端关闭连接。

第二次挥手:

服务器收到连接释放报文段后即发出确认,确认号是ack = u+1,而这个报文段自己的序号是v,等于它们前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。

第三次挥手:

若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。

第四次挥手:

客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack = w+1,序号seq = u+1。此时TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到连接关闭状态。
在这里插入图片描述
在这里插入图片描述

  1. FIN_WAIT_1 : 在ESTABLISHED(连接)状态下,主动断开连接会向对端发送FIN=1,然后进入FIN_WAIT_1状态。
  2. CLOSED_WAIT : 被动断开连接的一端收到FIN之后,会回应ack,然后进入CLOSED_WAIT状态,在CLOSED_WAIT状态下,连接只能发送数据不能接收数据。
  3. FIN_WAIT_2 : 主动断开连接的一端收到FIN的ack回应后会进入FIN_WAIT_2状态。此时无法再发送数据但是可以接受数据。
  4. LAST_ACK : 被动断开连接的一端在缓冲区数据发送完成后会发送FIN = 1然后进入LAST_ACK状态。如果程序健壮性较差,在socket收到文件结束符之后没有关闭socket,此处不会发出FIN,导致连接停留在CLOSED_WAIT&FIN_WAIT_2状态。
  5. TIME_WAIT : 主动断开连接的一端在收到对端的FIN后回应ACK然后进入TIME_WAIT。此状态下连接已断开,但为了避免最后一个ACK在网络中迷路,而导致的状态紊乱,端口会被保留2*MSL的时长。
  6. CLOSED : 在TIME_WAIT状态停留时间达到2*MSL之后进入CLOSED状态,表示无任何连接。

参考来自:
作者:DocMike
链接:https://www.imooc.com/article/19345
来源:慕课网

2.qq的数据能够抓取吗?为什么?

??这个问题暂时还不会回答

3.服务器如何实现消息推送?websocket协议的作用

首先:

服务器推送消息的方法有:

1).轮询

2).http交流

3).websocket

4).http2.0

websocket是一个允许Web应用程序与服务器进行双向通信的协议。HTML5的Websocket API主要是为浏览器提供一个而给予TCP协议实现全双工通信的方法。

4.通过requests去下载视频如优酷视频能实现吗?为什么?
???
5.http协议的keep-alive字段的作用
​ http的keep-alive 和tcp的keep-alive http的keep-alive 相当于保存了一个连接池,使用完之后不会立即销毁而是放在池子里,下次用的时候重新用.tcp的keep-alive 是保活机制,防止对面的服务器挂掉,而浪费这个连接,如果挂掉之后会返回rste 和tcp的keep-alive http的keep-alive 相当于保存了一个连接池,使用完之后不会立即销毁而是放在池子里,下次用的时候重新用.tcp的keep-alive 是保活机制,防止对面的服务器挂掉,而浪费这个连接,如果挂掉之后会返回rst.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值