Python接口测试之HTTP详解(十二)

   概述

    超文本传输协议 (HTTP) 是一种用于分布式、协作式、超媒体信息系统的应用级协议。这是1990年以来万维网 (即因特网) 数据通信的基础。HTTP 是一种通用

和无状态的协议, 它可以用于其他目的, 以及使用其请求方法、错误代码和标头的扩展。基本上, HTTP 是一种基于 tcp/ip 的通信协议, 用于在万维网上传送数据

(HTML 文件、图像文件、查询结果等)。默认端口为 TCP 80, 但也可以使用其他端口。它为计算机提供了一种标准化的通信方式。HTTP 规范指定如何构造客户端的

请求数据并将其发送到服务器, 以及服务器如何响应这些请求。

 基本功能

  有三基本特性使 HTTP 成为一个简单但功能强大的协议:
  1、http 是无连接的: http 客户端, 即浏览器启动 http 请求, 在发出请求后, 客户端断开与服务器的连接并等待响应。服务器处理请求并重新与客户端的连接以发送响应。
  2、http 是独立于媒体的: 这意味着, 只要客户端和服务器都知道如何处理数据内容, 任何类型的数据都可以通过 http 发送。客户端和服务器都需要使用适当的 MIME 类
型来指定内容类型。
  3、http 是无状态的: 如上所述, http 是无连接的, 它是 http 是无状态协议的直接结果。服务器和客户端只在当前请求期间才知道对方。后来, 他们俩都忘了对方。由于协
议的这种性质, 无论是客户端还是浏览器都不能在 web 页之间的不同请求之间保留信息。http/1.0 使用每个请求/响应交换的新连接, 而 http/1.1 连接可用于一个或多个请求
/响应交换机。

  基本结构

    下图显示了 web 应用程序的一个非常基本的体系结构, 并描述了 HTTP 所处的位置:

    

http 协议是一种请求/响应协议, 基于基于客户端/服务器的体系结构, 其中 web 浏览器、机器人和搜索引擎等行为类似于 http 客户端, web 服务器充当服务器。

Client

HTTP 客户端以请求方法、URI 和协议版本的形式向服务器发送请求, 后跟一个类似 MIME 的消息, 其中包含请求修饰符、客户端信息以及通过 tcp/ip 连接的可能的正文内容。

Server

HTTP 服务器使用状态行进行响应, 包括消息的协议版本和成功或错误代码, 后跟类似 MIME 的消息, 其中包含服务器信息、实体元和可能的实体正文内容。

 PARAMETERS

    这里将列出一些重要的 HTTP 协议参数以及它们在通信中使用的语法。例如, 日期格式、URL 格式等。这将帮助您在编写 HTTP 客户端或服务器程序时构造请求和响应消息。

   HTTP VERSION

     HTTP 使用 <major>. <minor> 编号方案来指示协议的版本。http 消息的版本由第一行中的 http 版本字段指示。下面是指定 HTTP 版本号的一般语法:

                                                               HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT

    统一资源标识符

      统一资源标识符 (URI) 是简单格式化的, 包含名称、位置等的 case-insensitive 字符串, 用于标识资源, 例如网站、web 服务等。用于 HTTP 的 URI 的一般语法如下:

                                                             URI = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

 如果端口为空或未给定, 则假定端口80为 HTTP, 空 abs_path 等效于 "/" 的 abs_path。在保留的和不安全的集合中的字符与它们的 "%" 十六进制十六进制编码等效。

    时间格式

      所有 HTTP 日期/时间戳都必须以格林尼治标准时间 (GMT) 表示, 无例外。允许 HTTP 应用程序使用下列三个日期/时间戳表示法:

      Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123

    编码

     我们使用字符集来指定客户端首选的字符集。可以列出多个字符集, 用逗号分隔。如果未指定值, 则默认为 US ASCII。

    内容编码

      内容编码值表示在通过网络传递内容之前, 已使用编码算法对其进行编码。内容编码是主要用于允许文档被压缩或在不丢失身份的情况下进行有用的转换。所有的内容

编码值都是 case-insensitive 的。HTTP/1.1 在接受编码和内容编码标头字段中使用内容编码值, 我们将在后面的章节中看到。

     类型媒体

      HTTP 在内容类型中使用 Internet 媒体类型并接受标头字段, 以便提供开放式和可扩展的数据类型和文字协商。所有媒体类型的值都在 Internet 指定的数字颁发机构 (IANA)

中注册。指定媒体类型的常规语法如下:

     

media-type = type "/" subtype *( ";" parameter )

 

 如:

Accept: image/gif

 语言标签

    HTTP 在接受语言和内容语言字段中使用语言标记。语言标记由一个或多个部分组成: 主要语言标记和可能的空系列子:

language-tag = primary-tag *( "-" subtag )

 

 标签内不允许空格, 所有标签都是 case-insensitive 的。其中任何两个字母的主标签是一个 ISO-639 的语言缩写和任何两个字母的初始子是一个 ISO-3166 国家代码。

   消息

HTTP 基于客户端-服务器体系结构模型和一个无状态请求/响应协议, 它通过在可靠的 tcp/ip 连接之间交换消息来操作。http"客户端" 是一个程序 (Web 浏览器或任何其他
客户端), 它为发送一个或多个 http 请求消息而建立到服务器的连接。http "服务器" 是一个程序 (通常是像 Apache web 服务器或 Internet 信息服务 IIS 等的 web 服务器),
它接受连接以通过发送 http 响应消息来服务 http 请求。HTTP 使用统一资源标识符 (URI) 来标识给定的资源并建立连接。建立连接后, HTTP 消息的传递方式与internet
邮件 [RFC5322] 和多用途 internet 邮件扩展 (MIME) [RFC2045] 所使用的格式类似。这些消息包括从客户端到服务器的请求以及从服务器到客户端的响应, 其格式如下:
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages

http 请求和 http 响应使用 RFC 822 的通用消息格式来传输所需的数据。此通用邮件格式包括以下四项。

A Start-line
Zero or more header fields followed by CRLF
An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
Optionally a message-body

起始行将具有以下通用语法:

start-line = Request-Line | Status-Line

 

我们将在讨论 http 请求和 http 响应消息时分别讨论请求行和状态行。现在, 让我们看看在请求和响应的情况下开始行的示例:

GET /hello.htm HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)

 

   Header Field

HTTP 标头字段提供有关请求或响应的必需信息, 或有关在消息正文中发送的对象。有四种类型的 HTTP 消息头:
通用头: 这些头字段对请求和响应消息具有一般适用性。
请求头: 这些头字段仅适用于请求消息。
响应头: 这些头字段仅适用于响应消息。
实体-页眉: 这些标头字段定义元关于实体体, 或者, 如果没有正文, 则说明请求所标识的资源。
所有 above-mentioned 标头都遵循相同的通用格式, 并且每个标题字段都由一个后跟冒号 (:) 和字段值的名称组成, 如下所示:
message-header = field-name ":" [ field-value ]

 

 以下是各种标题字段的示例:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

 

 

 

    如您对我写的内容感兴趣,可扫描如下二维码关注我的公众号,谢谢!!!

 

   

  

 

posted @ 2017-08-10 23:07  无涯(WuYa)  阅读(3509)  评论(0编辑  收藏  举报