• 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请求,不管理缓存减少网络通信。

    9.7传输编码

    http传输编码:资源转为HTTP响应体的机制。数据传输的封帧方式可能不同,文档相同,不改变数据。可能是原始字节,也可能是压缩后字节(gzip)。

    Requests:对传输的信息自动解压缩,并对用户隐藏过程。

    9.8内容协商

    内容类型(content type)与内容编码。对终端用户,或发送HTTp请求的客户端程序可见

    决定给定资源的文件格式。文本——选择编码方式(encode)——字节

    RESTful网络服务,为不同返回格式指定不同URL查询参数

    HTTp旨在为每个资源提供一个路径

    内容协商被服务器忽略

    urllib与Requests允许头信息加入到请求。

    支持创建:自动使用用户首选HTTp头的客户端

    Requests:Session概念实现。可覆盖默认值(覆盖是否修改默认值)

    9.9内容类型

    Content-type头

    文本类型:指定文本的字符编码方式

    使用代码检查内容类型:自行检测分割情况

    Content-type: text/html ; charset=utf-8

    9.10HTTp认证

    需要区分认证失败的303与重定向303

    每个HTTP请求是独立的。同一套接字处理的多个连接请求,需要对认证消息单独传输。

    独立性保证了代理服务器与负载均衡器在多个服务期间分配HTTp请求可以安全运行。

    认证机制

    1.基本认证

    2.摘要访问认证。用户名可见,表单数据可见:不安全。

     3.TLS

    Requests:指定auth字段

    9.11cookie

    客户端不可读:不可改变语义

    服务器:解密

    使用Ajax时,只要调用的API属于同一主机,仍可使用cookie

    HTTP使用cookie跟踪用户身份

    Request创建并使用Session对象,自动进行cookie跟踪

    9.12连接、keepalive、httplib

    打开连接:三次握手

    已打开:连接复用的好处:避免连接开销

    Connection:close一次请求完成后关闭连接

    Requests Session对象,使用第三方urllib3包。

    维护连接池,保存最近通信并保持打开状态的HTTP服务器。

    同一网站请求其他资源时,自动复用连接池中保存的连接了

  • 相关阅读:
    用HTML5的Audio标签做一个歌词同步的效果
    关于AJAX的跨域问题
    java 计算器后台实现
    springboot 学习(一) 配置mybatis ,全局日期处理
    Java不可见字符处理
    eclipse 常用插件
    Spring data jpa 返回map 结果集
    Oracle数据中表值插不进去问题(转)
    利用Eclipse的JPA自动生成注解实体
    对象-Map 相互转换
  • 原文地址:https://www.cnblogs.com/qmcj/p/9218405.html
Copyright © 2020-2023  润新知