目录
一、什么是HTTP?
二、与HTTP有关的协议
三、HTTP请求特征
四、HTTP组成格式
五、HTTP标头
1.通用标头
2.实体标头
3.请求标头
4.响应标头
六、HTTP状态码分类
我们在日常测试过程中,也可以通过浏览器F12简单定位是前端问题还是后端问题,同样的在接口自动化测试过程中,基本都是发送HTTP/HTTPS请求,本文主要是讲解下HTTP基础知识,适合小白。后续会讲解接口自动化测试中Python库中强大的requests库,尽请期待。
一、什么是HTTP?
HTTP(超文本传输协议):在计算机世界里专门在两点之间进行传输文字、图片、音频、视频等超文本数据的约束和规范。网络协议。
二、与HTTP有关的协议
- TCP/IP协议(又称为协议簇):主要包含TCP(传输控制协议--可靠)、IP(通信寻址),还有UDP(用户数据报协议)、ICMP(Internal控制报文协议)、ARP(地址解析协议)。
- DNS(域名系统):将域名和IP地址相互映射的一个分布式数据库。
- URI/URL:URI(统一资源标示符),URL(统一资源定位符,即网址),URN(统一资源名称)。
- HTTPS---在HTTP的基础上加了SSL层,就是说:HTTPS=HTTP+SSL/TLS(80端口是HTTP的默认端口、443端口是HTTPS的默认端口)
三、HTTP请求特征
- 支持客户-服务器
- 简单快速。常用的HTTP请求方式有:get、head、post
- 灵活:HTTP允许传输任意类型的数据对象
- 无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,断开连接
- 无状态:协议对于事务处理没有记忆能力
四、HTTP组成格式
- HTTP组成:起始行、头部字段、消息正文
起始行和头部字段并成为请求头或响应头---header
消息正文:称为实体---body
HTTP每次发送的报文必须含有header,body可以没有,且header和body之间必须要有一个空行
每个报文的起始行由:请求方法、URL字段、HTTP版本字段组成
- HTTP的请求方法一般有8种:
Get(获取资源):用于请求访问已经被URI识别的资源
Post(传输实体)
Get和Post唯一的最大的不同就是对于Post来说后面要请求的数据不是必须特定赋值的
Put(传输文件):存在安全性问题
Head(获取响应头部):head和get一样,只是不返回报文主题部分
Delete(删除文件):按请求URI删除指定的资源
Options:询问支持的方法
Trace:追踪路径
Connnect:隧道协议连接代理,主要使用SSL(安全套接层)和TLS(传输层安全)协议加密后通过网络隧道传输
五、HTTP标头
根据属性所在的位置可划分为:通用标头、实体标头、请求标头、响应标头
根据是否被缓存可划分为:end-to-end(端到端首部)、top-to-top(逐跳首部)
逐跳首部:connection、keep-alive、proxy-authenticate、proxy-authorization、trailer、TE、transfer-encoding、upgrade
端到端首部:cache-control、pragma、via、warning
1.通用标头
通用标头:用于传达有关消息本身的信息,而不是它所携带的内容。
主要的通用标头有:cache-control、connection、date、pragma、trailer、transfer-encoding、upgrade、via、warning
cache-control:通用标头的指令,能够管理如何对HTTP的请求或响应使用缓存。 可缓存性:no-cache、no-store、private、public 缓存有效性时间:max-age、s-maxage、max-stale、min-fresh 重新验证并重新加载:must-revalidate、proxy-revalidate 其他:only-if-cached、no-transform Connection:HTTP协议使用TCP来管理连接方式,分为:持久性连接、非持久性连接。 持久性连接:一次会话完成后,TCP连接并未关闭,再次发起请求就不需要建立TCP连接,可直接进行请求和响应。 从HTTP1.1开始,默认使用持久性连接。 Connection:keep-alive keep-alive也是一个通用标头,通常connection和keep-alive一起使用,keep-alive通常由2个参数:timeout、max。 keep-alive:timeout=5,max=1000 Timeout:空闲连接必须打开的最短时间,也就是说请求的连接时间不能少于5s Max:在连接关闭之前服务器所能收到的最大请求数。 非持久性连接:一次会话请求/响应后关闭连接的方式,即:connection:close Date:可出现在请求标头和响应标头中,格式为: Date :Wed, 21 Oct 2015 07:28:00 GMT -----格林威治标准时间 Pragma:HTTP1.1之前版本的历史遗留字段,pragma:no-cache Trailer:报文首部字段 transfer-encoding:内容协商,规定传输报文所采用的编码方式 Upgrade:首部字段upgrade用于检测HTTP协议及其他协议是否可使用更高版本进行通信。 Via:跟踪客户端和服务器之间的请求或响应路径。 Warning :警告。 |
2.实体标头
实体标头:描述消息正文内容。
Allow:资源可支持的HTTP方法 Content-Encoding:实体主体适用的编码方式 Content-Language:实体主体的自然语言 Content-Length:实体主体的大小(单位:字节) Content-Location:替代对应资源的URI Content-MD5:实体主体的报文摘要 Content-Range:实体主体的位置范围 Content-Type:实体主体的媒体类型 Expires:实体主体过期的日期时间 Last-Modified:资源的最后修改日期时间 |
3.请求标头
请求标头:告知客户端能够接收的MIME类型。
MIME:描述消息内容类型的因特网标准。包含文本、图像、音频、视频以及其他应用程序专用数据等。 MIME类型: 文本文件:text/html、text/plain、text/css、application/json、application/xml 图片文件 : image/jpeg、 image/gif、 image/png 视频文件 :video/mpeg ̵ video/quicktime 应用程序二进制文件 : application/octet-stream ̵ application/zip 一般MIME类型也会和q属性一起使用,q代表权重。 |
常见请求标头:
Accept: application/json, text/plain, */*,q=0.1 Accept-Charset: 表示客户但能够接受的字符编码。如:utf-8, iso-8859-1;q=0.5, *;q=0.1 Accept-Encoding: 表示客户端希望服务端返回的内容编码。如:gzip, deflate, br Accept-Language: 表示客户端需要服务端返回的语言类型。如:zh-CN,zh;q=0.9 Authorization: 用于向服务器认证用户代理的凭据。 Expect: 指示服务器需要满足的期望才能正确处理请求。 From: 告知服务器使用用户代理的电子邮件地址。 Host: 服务器的域名和服务器监听的TCP端口号。 Range: 指示服务器应返回文档指定部分的资源,可以一次请求一个Range来返回多个部分,服务器会将这些资源返回各个文档中。 Referer: 告知服务器该网页是从哪个页面链接过来的。 TE: 告知服务器能够处理响应的传输编码方式及相对优先级。 User-Agent: 创建请求的浏览器和用户代理名称等信息传达给服务器。 |
4.响应标头
响应标头:提供了服务器对客户端请求的响应信息。
Accept-Ranges: 是否接受字节范围请求 Age: 推算资源创建经过时间 ETag: 资源的匹配信息 Location: 令客户端重定向至指定URI Proxy-Authenticate: 代理服务器对客户端的认证信息 Retry-After: 对再次发起请求的时机要求 Server: HTTP服务器的安装信息 Vary: 代理服务器缓存的管理信息 www-Authenticate: 服务器对客户端的认证信息 Access-Control-Allow-Origin: 告诉浏览器允许该来源进行资源访问 Keep-Alive: Connection非连续连接的存活时间,可以进行指定 Set-Cookie: 服务器向客户端发送sessionID |
六、HTTP状态码分类
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务端错误,服务器在处理请求过程中发生了错误 |
HTTP状态码列表:
状态码 | 状态码英文名称 | 中文描述 |
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |