接口自动化测试1-HTTP基础

发布时间:2026/10/21 5:54:14
接口自动化测试1-HTTP基础
HTTP的诞生1989年Tim Berners-Lee提出了在互联网上构建超链接文档系统的构想构想中包含了以下三项关键技术标志着HTTP的诞生。URL统一资源标识符作为互联网上资源的唯一身份。HTML超文本标记语言描述超文本文档。HTTP超文本传输协议用来传输超文本。HTTP常用请求方法GET方法请求指定的页面信息返回实体主体。用于获取信息不会修改服务器上的数据。请求的数据会附在Path之后以“”分隔URL和传输数据参数之间以“”相连。英文字母、数字参数会原样发送中文字符会经过BASE64转换后发送。POST方法向指定资源提交数据进行处理请求数据被包含在请求体中。POST方法在本质上与GET方法是一样的它们都通过URL向服务器发送请求数据。由于浏览器对URL长度的限制当参数较多且不足以通过URL发送完成时使用POST方法将重要请求参数放在body中进行传输可以有效解决此问题。在实际开发过程中登录等数据量较少的请求也使用POST方法进行传输一方面是基于安全考虑不会让未经加密的用户名和密码在浏览器网址栏上直接出现。使用POST方式至少需要抓取请求报文才能看到另一方面浏览器在发送POST请求时通常是以二段式进行发送的第一次发送Headers部分当服务器返回100状态码后第二次发送DATA。这在一定程度上可以确保关键数据传输的完整性。HEAD方法请求返回的响应中没有具体的内容用于获取报头。此方法与GET方法在工作流程上类似只是并不需要服务器在响应报文中回传请求主体HEAD方法用于获取请求资源的首部和检查超链接的有效性。在有限的速度和带宽下HEAD方法比GET方法消耗更少的资源。PUT方法从客户端向服务器端传送的数据取代指定的文档的内容。PUT方法和POST方法非常类似它们都用作数据的修改。它们的主要区别就是PUT方法是幂等的也就是说如果对一段资源进行多次PUT请求提交则最后的结果应该都是一样的可以用来对数据进行更新操作。POST方法如果进行多次数据提交则最后的结果是不一样的可以用来对数据进行新增操作。在实际软件接口开发中两种方法是可选的常用POST方法来代替PUT方法。DELETE方法请求服务器删除指定的页面。常见HTTP状态码Web服务器接收到浏览器发送的请求后首先需要判断请求的合理性再处理请求内容。一部分请求由于种种原因会被直接拒绝例如Headers字段缺失。另一部分请求被处理后会返回响应内容。所有响应会携带着一个事务处理分类码这个分类码就是HTTP的响应状态码也被称为协议状态码。状态码由三位数字和原因短语组成数字首位作为响应分类数依据按照状态码首位数字可分为五类。状态码常用范围类别原因短语1XX100~101Informational信息性状态码接收的请求正在处理2XX200~206Success成功状态码请求正常处理完毕3XX300~305Redirection重定向状态码需要附加操作完成请求4XX400~415Client Error客户端错误状态码服务器无法处理请求5XX500~505Service Error服务器端错误状态码服务器处理请求出错状态码的作用将返回状态码作为接口请求断言使用根据返回异常状态码快速地定位接口请求存在的问题根据返回状态码确定下一步事务处理内容常见状态码200 OK成功通常情况下客户端向服务器端发送的请求返回状态码是200表示服务器正常处理了请求无论这个请求在功能层面上是否正常完成。例如用户登录请求登录成功和登录失败返回的状态码都是200只在返回数据中体现具体请求处理情况。通常情况下随此状态码一起返回的还有请求资源。少数情况下返回报文中不携带主体例如HEAD请求只返回状态行和部分Headers内容。301 Moved Permanently永久重定向当服务器返回 301 时它会同时在响应头里提供一个Location字段告诉浏览器或客户端新的地址在哪里。随后浏览器会自动跳转到新地址搜索引擎也会把旧的链接权重和记录更新到新网址上。400 Bad Request错误请求表示服务器无法理解或拒绝处理客户端发来的请求通常是因为请求本身存在语法错误或格式问题。401 Unauthorized未授权意思是“未授权”但更准确的理解是“未认证”——表示请求需要身份验证而客户端没有提供有效的认证凭证或者提供的凭证无效。简单说就是服务器不知道你是谁需要你先证明身份。常见于需要登录才能访问的资源。常见原因未登录访问需要登录的页面或接口但请求中没有携带任何认证信息如 Cookie、Token。凭证无效或过期携带了 Token/Cookie但已过期、被撤销或格式错误。认证信息缺失请求头中缺少Authorization字段或格式不符合服务器要求。用户名/密码错误Basic Auth 等方式下凭证不正确。403 Forbidden禁止访问表示服务器理解了你的请求但拒绝执行。常见原因权限不足当前用户没有访问该文件或目录的权限如 Linux 文件权限设置过严。IP 被封禁服务器或防火墙如 WAF主动拒绝了这个 IP。目录列表被禁用访问一个没有默认首页的目录且服务器关闭了目录浏览功能。防盗链/访问规则网站配置了规则如.htaccess阻止特定来源或 User-Agent。CSRF/安全策略某些安全插件或云服务会直接返回 403 拦截可疑请求。404 Not Found未找到表示服务器无法找到客户端请求的资源。简单说就是服务器能正常响应但你要的这个东西不存在。常见于访问了不存在的页面、文件或接口路径。常见原因URL 拼写错误路径写错、大小写不匹配。资源已被删除或移动页面/文件被删除且没有配置重定向如 301。链接失效外部链接指向了一个已不存在的地址。路由未配置后端接口路径未注册或前端路由没有匹配到。服务器配置问题Web 服务器如 Nginx的 root 目录配置错误导致找不到文件。500 Internal Server Error服务器内部错误表示服务器在处理请求时遇到了意外情况无法完成请求。简单说就是服务器自己出问题了不是客户端的错。请求本身没问题但服务器在执行过程中崩了或抛出了未处理的异常。常见原因代码异常后端程序抛出未捕获的异常如空指针、数组越界、数据库查询报错。配置错误Web 服务器或应用服务器配置有误如 Nginx/Apache 配置错误、环境变量缺失。依赖服务故障数据库连接失败、缓存服务不可用、第三方 API 调用超时。资源耗尽内存溢出、磁盘空间不足、连接池耗尽。权限问题服务器进程无权访问某些文件或目录。版本不兼容运行时环境或依赖库版本不匹配。HeaderHTTP 头部Header是请求和响应中的“元信息”用来描述数据格式、身份凭证等。下面三个是最常打交道的。Content-Type数据是什么格式Content-Type告诉对方请求体或响应体是什么类型的数据以便正确解析。常见值值用途application/jsonJSON 格式API 开发中最常见application/x-www-form-urlencoded传统表单提交multipart/form-data文件上传场景text/htmlHTML 网页注意如果请求体是 JSON但Content-Type写成了text/plain服务器可能拒绝解析或返回 400/415。Cookie浏览器自动携带的状态Cookie 是服务器通过Set-Cookie响应头下发给浏览器的小型文本数据浏览器会自动保存并在后续同域请求中通过Cookie请求头回传。关键属性HttpOnly禁止 JavaScript 读取降低 XSS 窃取风险Secure仅通过 HTTPS 传输SameSite限制跨站携带缓解 CSRF 攻击注意Cookie 由浏览器自动管理前端 JS 无法直接设置HttpOnlyCookie。它有大小限制通常 4KB 左右。Token手动携带的身份凭证Token 是服务端签发的身份令牌客户端需要在后续请求中手动放入请求头通常是Authorization: Bearer token而不是像 Cookie 那样由浏览器自动携带。与 Cookie 的核心区别Cookie 浏览器自动管理Token 需要前端代码手动存取和携带Token 天然不随跨站请求自动发送因此在防 CSRF 方面更有优势Token 通常存储在 localStorage 或内存中需要注意 XSS 风险一句话Content-Type管格式Cookie管自动携带Token管手动证明身份。Body 格式请求体Body是 POST/PUT 等方法真正携带数据的地方。格式由Content-Type声明常见的有三种。application/json现代 API 最常用的格式。数据是结构化的 JSON 字符串可读性好支持嵌套对象和数组。json{ username: alice, password: ****** }对应Content-Type: application/json。application/x-www-form-urlencoded传统 HTML 表单的默认格式。数据被编码成key1value1key2value2的形式特殊字符会进行百分比编码。特点简单、兼容性好但不适合传输二进制数据或大量非 ASCII 字符。multipart/form-data用于文件上传或包含二进制数据的表单。每个字段被分隔符boundary隔开各自带有独立的头部信息。特点能高效传输文件但结构比前两者复杂。浏览器在form enctypemultipart/form-data时会自动使用这种格式。选择建议调 API 用 JSON传文件用 form-data兼容老系统或简单表单用 x-www-form-urlencoded。总结HTTP 基础看起来零散但抓住一条主线就不容易乱方法决定操作意图状态码告诉你结果Header描述元信息Body承载实际数据。日常开发中把这四块搞清楚排查接口问题时会快很多。