Python - HTTP 标头

  • 简述

    客户端和服务器之间的请求和响应涉及消息中的标头和正文。标头包含协议特定信息,这些信息出现在通过 TCP 连接发送的原始消息的开头。邮件正文与标题使用空行分隔。
  • 标头示例

    http 响应中的标头可以分为以下类型。下面是标题的描述和示例。

    Cache-Control

    Cache-Control 通用标头字段用于指定所有缓存系统必须遵守的指令。语法如下:
    
    Cache-Control : cache-request-directive|cache-response-directive
    
    HTTP 客户端或服务器可以使用Cache-control通用头来指定缓存的参数或从缓存中请求某些类型的文档。缓存指令在逗号分隔的列表中指定。例如:
    
    Cache-control: no-cache
    

    Connection

    Connection general-header 字段允许发送者指定该特定连接所需的选项,并且不能由代理通过进一步的连接进行通信。以下是使用连接头的简单语法:
    
    Connection : "Connection"
    
    HTTP/1.1 为发送者定义了“关闭”连接选项,以表明在响应完成后连接将被关闭。例如:
    
    Connection: close
    
    默认情况下,HTTP 1.1 使用持久连接,其中连接不会在事务后自动关闭。另一方面,HTTP 1.0 默认没有持久连接。如果 1.0 客户端希望使用持久连接,它使用keep-alive参数如下:
    
    Connection: keep-alive
    

    Date

    所有 HTTP 日期/时间戳必须以格林威治标准时间 (GMT) 表示,无一例外。HTTP 应用程序可以使用以下三种日期/时间戳表示中的任何一种:
    
    Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
    Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
    Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
    

    Transfer-Encoding

    Transfer-Encoding通用标头字段指示已将哪种类型的转换应用于消息正文,以便在发送者和接收者之间安全地传输它。这与内容编码不同,因为传输编码是消息的属性,而不是实体主体的属性。Transfer-Encoding头域的语法如下:
    
    Transfer-Encoding: chunked
    
    所有传输编码值都不区分大小写。

    Upgrade

    升级通用标头允许客户端指定它支持的其他通信协议,并且如果服务器发现它适合切换协议,则希望使用这些协议。例如:
    
    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    
    Upgrade 标头字段旨在提供一种简单的机制,用于从 HTTP/1.1 转换到其他一些不兼容的协议。

    Via

    网关和代理必须使用 Via 通用报头来指示中间协议和接收者例如,请求消息可以从 HTTP/1.0 用户代理发送到代号为“fred”的内部代理,该代理使用 HTTP/1.1 将请求转发到 nowhere.com 上的公共代理,该代理通过以下方式完成请求将其转发到位于 www.ics.uci.edu 的源服务器。www.ics.uci.edu 收到的请求将具有以下 Via 头字段:
    
    Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
    
    Upgrade 标头字段旨在提供一种简单的机制,用于从 HTTP/1.1 转换到其他一些不兼容的协议。

    Warning

    警告通用标头用于携带有关消息状态或转换的附加信息,这些信息可能不会反映在消息中。一个响应可能带有多个警告标头。
    
    Warning : warn-code SP warn-agent SP warn-text SP warn-date
    
  • 例子

    在下面的示例中,我们使用 urllib2 模块通过 urlopen 获取响应。接下来,我们应用 info() 方法来获取该响应的标头信息。
    
    import urllib2
    response = urllib2.urlopen('http://www.cainiaoya.com/python')
    html = response.info()
    print html
    
    当我们运行上述程序时,我们得到以下输出 -
    
    Access-Control-Allow-Headers: X-Requested-With
    Access-Control-Allow-Origin: *
    Cache-Control: max-age=2592000
    Content-Type: text/html; charset=UTF-8
    Date: Mon, 02 Jul 2018 11:06:07 GMT
    Expires: Wed, 01 Aug 2018 11:06:07 GMT
    Last-Modified: Sun, 01 Jul 2018 21:05:38 GMT
    Server: ECS (tir/CDD1)
    Vary: Accept-Encoding
    X-Cache: HIT
    Content-Length: 22063
    Connection: close