HTTP客户端

Posted qmcj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP客户端相关的知识,希望对你有一定的参考价值。

客户端程序:获取或缓存文档

      向服务器提交请求或数据

 

9.1Python客户端 

Requests库

 

基本接口(urllib)提供可调用的方法,用于:打开HTTp连接,发起请求,等待接收响应头,打包响应对象,响应体留在套接字的接受队列,程序员需要时读取响应体。

 

HTTP:不允许客户端在收到上个请求响应前发送第二个请求

 

9.2端口、加密、封帧

HTTP的请求与响应采取了相同的格式化与封帧规则

请求与响应:HTTP消息

消息的构成:

1

请求:方法名+请求的文档

响应:返回码和描述信息

第一行以回车换行结束

2

0-多个头信息(名称:值)

每个头信息以CR-LF结尾

所有头信息后跟一个空行CRLFCRLF

3

可选的消息体。

1、2部分整体由空行封帧

消息体封帧

content-Length头:消息体包含的字节数。可能动态生成

Transfer-Encoding头:消息体分成一系列小块,每块使用前缀指定长度

每个块中:块长度、CRLF、数据块、CRLF。

结尾:长度为0的块

 

9.3方法

HTTP请求中的第一个单词:请求的操作类型

GET 读:不包括消息体

只能读,不能写服务器上的数据。附加到请求路径后的参数只能修改返回后的文档。

可以将响应加入缓存。可以安全的重试。

POST 写:

不能缓存,不能重发

 

GET:

返回响应头:OPTIONS服务器不准备资源

      HEAD准备

POST:

幂等:  PUT:文档,路径

     DELETE:文档:路径

 

urllib.urlopen,隐式选择了HTTP方法(重载?)

 

9.4路径与主机

要求强制使用Host头,指出URL中使用的主机名

否则服务器:400

 

9.5状态码

响应首行:响应码+文本

200-300成功

300-400重定向(不含消息体)

400-500客户端请求无法识别,非法

500-600服务器错误

 

库是否会自动重定向

否则自行检查3xx响应头

Requests提供,history:重定向链

 

自行处理:重写缓存中的旧url

 

重定向:强制将url转换为官网形式

 

当抛出异常并中断程序

查看异常对象,查看响应细节

异常对象的作用:1.表示发生的异常  2.包含响应对象

 

requests库处理方案:只请求状态码,也会返回响应对象

 

9.6缓存与验证

防止客户端频繁请求相同资源

使用缓存:减少网络流量,降低服务器负载,加快客户端

 

服务器:添加HTTP允许缓存

缓存文档的语义:相同路径&其他?(时间)

Vary头:文档依赖的其他HTTP头。Host,Accept-Encoding

    服务器发送不同的文档:依赖Cookie选项

 

完全禁止缓存:禁止将资源存储在客户端。防止客户端自动复制非易失存储器的响应,由客户决定是否保存资源副本到硬盘

 

允许缓存:服务器希望客户端提供缓存文档信息

缓存失效标志:过期日期(绝对)Expires头/缓存有效时间(相对)Cache-control头

 

服务器控制缓存有效性:检查请求头(条件请求)。资源过期——发送消息体

1.资源最近修改日期。服务器端对比

2.资源ID匹配

 

urllib与Requests默认需要实时网络HTTp请求,不管理缓存减少网络通信。

 

以上是关于HTTP客户端的主要内容,如果未能解决你的问题,请参考以下文章

如果 HTTP/1.1 客户端与仅 HTTP/2 的服务器通信会怎样,如果 HTTP/2 客户端与仅 HTTP/1.1 的服务器通信会怎样?

NodeJs 之 HTTP服务器与客户端

http2 客户端无法解析 HTTP 升级响应标头

认识http客户端

通过 JAX-RS 客户端支持 HTTP/1.1 和 HTTP/2

Apache HTTP 客户端 - Apache Http 客户端中 0 个租用连接的问题