02 HTTP协议详解 - 接口测试的基石本章目标深入理解HTTP/HTTPS协议掌握请求方法、状态码、请求头/响应头为接口测试打下坚实基础。2.1 HTTP是什么生活中的类比想象HTTP协议就像寄快递的标准流程你寄件人 快递公司HTTP协议 收件人服务器 │ │ │ │ 1. 填写快递单请求 │ 2. 按标准运输 │ │ ────────────────────── │ ────────────────────── │ │ │ │ │ 4. 收到回执响应 │ 3. 按标准返回 │ │ ────────────────────── │ ────────────────────── │HTTPHyperText Transfer Protocol超文本传输协议是客户端和服务器之间通信的标准协议。HTTP的工作方式关键特点无状态每次请求都是独立的服务器不记住之前的请求请求-响应模式客户端发起请求服务器返回响应基于TCPHTTP建立在TCP协议之上2.2 HTTP vs HTTPS对比表特性HTTPHTTPS全称HyperText Transfer ProtocolHyperText Transfer Protocol Secure安全性明文传输不安全加密传输安全端口80443加密方式无SSL/TLS加密性能较快稍慢有加密开销SEO搜索引擎降权搜索引擎优先收录证书不需要需要SSL证书简单理解HTTP 寄明信片邮递员可以看到内容HTTPS 寄密码信只有收件人能打开2.3 HTTP请求详解请求结构POST /api/login HTTP/1.1 ← 请求行方法 URL 协议版本 Host: api.example.com ← Content-Type: application/json ← 请求头Request Headers Authorization: Bearer xxx ← Content-Length: 56 ← ← 空行分隔符 {username:admin,password:123456} ← 请求体Request Body请求方法HTTP Methods方法用途是否幂等是否安全参数位置示例GET获取资源是是URLQueryGET /users?id1POST创建资源否否BodyPOST /usersPUT全量更新是否BodyPUT /users/1PATCH部分更新否否BodyPATCH /users/1DELETE删除资源是否URLDELETE /users/1幂等性多次执行结果相同。比如GET /users/1 执行100次结果都一样。安全性不会改变服务器状态。GET是安全的POST/PUT/DELETE不安全。生动例子把HTTP方法比作餐厅点餐GET → 看菜单获取信息不改变什么 POST → 点新菜创建新订单 PUT → 修改整单把订单全部换成别的菜 PATCH → 修改部分只把可乐换成雪碧 DELETE → 取消订单删除2.4 HTTP响应详解响应结构HTTP/1.1 200 OK ← 状态行协议 状态码 状态描述 Content-Type: application/json ← Content-Length: 123 ← 响应头Response Headers Server: nginx/1.18.0 ← Date: Mon, 01 Jan 2024 00:00:00 GMT ← ← 空行 {code:0,data:{name:张三}} ← 响应体Response BodyHTTP状态码状态码是服务器对请求的回答分为5大类常见状态码详解状态码含义场景测试关注点200OK请求成功验证返回数据正确性201Created创建成功验证资源是否创建204No Content删除成功验证资源是否删除301永久重定向URL已变更验证跳转是否正确302临时重定向临时跳转验证跳转是否正确400请求参数错误参数缺失/格式错误验证参数校验401未认证未登录/Token失效验证认证机制403无权限权限不足验证授权机制404资源不存在URL错误或资源已删除验证错误处理422语义错误参数格式对但逻辑错验证业务校验500服务器内部错误代码异常验证异常处理502网关错误上游服务故障验证容错机制503服务不可用服务维护/过载验证降级策略状态码记忆口诀1xx Hold on等一下 2xx Here you go给你 3xx Go away去别的地方 4xx You messed up你错了 5xx I messed up我错了2.5 HTTP请求头Request Headers请求头是客户端告诉服务器我是谁、我要什么的信息。常见请求头请求头说明示例Host目标服务器域名Host: api.example.comContent-Type请求体格式Content-Type: application/jsonAccept期望的响应格式Accept: application/jsonAuthorization认证信息Authorization: Bearer token123User-Agent客户端信息User-Agent: Mozilla/5.0...Cookie携带的CookieCookie: sessionIdabc123Content-Length请求体长度Content-Length: 56Content-Type 详解Content-Type用途示例application/json传递JSON数据{name:张三}application/x-www-form-urlencoded表单提交name张三age20multipart/form-data文件上传带boundary的分隔数据text/xmlXML数据username张三/name/usertext/plain纯文本Hello World2.6 HTTP响应头Response Headers响应头是服务器告诉客户端我是什么、怎么处理响应的信息。常见响应头响应头说明示例Content-Type响应体格式Content-Type: application/jsonContent-Length响应体长度Content-Length: 1234Set-Cookie设置CookieSet-Cookie: sessionIdabc; Path/Cache-Control缓存策略Cache-Control: no-cacheLocation重定向地址Location: https://new-url.comServer服务器信息Server: nginx/1.18.0Date响应时间Date: Mon, 01 Jan 2024 00:00:00 GMT2.7 完整的HTTP请求-响应示例场景用户登录请求POST /api/login HTTP/1.1 Host: www.example.com Content-Type: application/json User-Agent: Mozilla/5.0 Content-Length: 45 {username:admin,password:123456}响应成功HTTP/1.1 200 OK Content-Type: application/json Set-Cookie: sessionIdabc123; Path/; HttpOnly Content-Length: 56 { code: 0, message: 登录成功, data: { token: eyJhbGciOiJIUzI1NiIs..., expires: 3600 } }响应失败-密码错误HTTP/1.1 401 Unauthorized Content-Type: application/json Content-Length: 48 { code: 1001, message: 用户名或密码错误 }2.8 Cookie、Session、Token三者对比特性CookieSessionTokenJWT存储位置浏览器服务器客户端浏览器/内存安全性低可被篡改中高签名验证服务器压力小大存储Session小无状态跨域支持受限受限支持适用场景简单网站传统Web应用现代API、微服务JWT Token详解JWT结构Header.Payload.SignatureeyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjEsIm5hbWUiOiJhZG1pbiJ9.SflKxwRJSMeKKF2QT4fwpMe... ↑HeaderBase64 ↑PayloadBase64 ↑Signature签名2.9 HTTP/1.1 vs HTTP/2 vs HTTP/3特性HTTP/1.1HTTP/2HTTP/3发布年份199720152022传输层TCPTCPQUIC (基于UDP)连接复用需多个TCP连接单一TCP连接多路复用多路复用头部压缩无HPACKQPACK服务器推送无支持支持队头阻塞有TCP层有无2.10 本章实战用浏览器开发者工具观察HTTP步骤打开Chrome浏览器按 F12 打开开发者工具切换到 Network网络标签访问任意网站如 https://jsonplaceholder.typicode.com观察请求列表观察要点点击某个请求查看Headers请求头和响应头Payload请求参数Preview/Response响应数据Timing请求各阶段耗时2.11 本章小结核心知识点请求结构请求行方法 URL 版本、请求头元信息、请求体传输数据响应结构状态行版本 状态码 描述、响应头元信息、响应体返回数据请求方法GET/POST/PUT/PATCH/DELETE幂等性概念状态码2xx成功 3xx重定向 4xx客户端错 5xx服务端错认证方式Cookie/Session/TokenJWT原理必须记住的状态码类别必记状态码2xx200, 201, 2043xx301, 302, 3044xx400, 401, 403, 404, 4225xx500, 502, 503课后练习 实践题用浏览器F12访问一个网站找到一个API请求分析它的请求方法、请求头、响应状态码和响应数据。思考题为什么POST请求不是幂等的什么场景下需要幂等性设计对比题比较Cookie、Session、Token三种认证方式的优缺点什么场景适合用什么场景题设计一个用户注册接口应该用什么HTTP方法可能的返回状态码有哪些2.12 下章预告下一章我们将学习RESTful API设计规范理解如何设计优雅的接口以及如何测试RESTful接口HTTP协议是接口测试的基石掌握它你就掌握了与服务器对话的语言。
软件测试接口测试从入门到精通:HTTP协议详解
02 HTTP协议详解 - 接口测试的基石本章目标深入理解HTTP/HTTPS协议掌握请求方法、状态码、请求头/响应头为接口测试打下坚实基础。2.1 HTTP是什么生活中的类比想象HTTP协议就像寄快递的标准流程你寄件人 快递公司HTTP协议 收件人服务器 │ │ │ │ 1. 填写快递单请求 │ 2. 按标准运输 │ │ ────────────────────── │ ────────────────────── │ │ │ │ │ 4. 收到回执响应 │ 3. 按标准返回 │ │ ────────────────────── │ ────────────────────── │HTTPHyperText Transfer Protocol超文本传输协议是客户端和服务器之间通信的标准协议。HTTP的工作方式关键特点无状态每次请求都是独立的服务器不记住之前的请求请求-响应模式客户端发起请求服务器返回响应基于TCPHTTP建立在TCP协议之上2.2 HTTP vs HTTPS对比表特性HTTPHTTPS全称HyperText Transfer ProtocolHyperText Transfer Protocol Secure安全性明文传输不安全加密传输安全端口80443加密方式无SSL/TLS加密性能较快稍慢有加密开销SEO搜索引擎降权搜索引擎优先收录证书不需要需要SSL证书简单理解HTTP 寄明信片邮递员可以看到内容HTTPS 寄密码信只有收件人能打开2.3 HTTP请求详解请求结构POST /api/login HTTP/1.1 ← 请求行方法 URL 协议版本 Host: api.example.com ← Content-Type: application/json ← 请求头Request Headers Authorization: Bearer xxx ← Content-Length: 56 ← ← 空行分隔符 {username:admin,password:123456} ← 请求体Request Body请求方法HTTP Methods方法用途是否幂等是否安全参数位置示例GET获取资源是是URLQueryGET /users?id1POST创建资源否否BodyPOST /usersPUT全量更新是否BodyPUT /users/1PATCH部分更新否否BodyPATCH /users/1DELETE删除资源是否URLDELETE /users/1幂等性多次执行结果相同。比如GET /users/1 执行100次结果都一样。安全性不会改变服务器状态。GET是安全的POST/PUT/DELETE不安全。生动例子把HTTP方法比作餐厅点餐GET → 看菜单获取信息不改变什么 POST → 点新菜创建新订单 PUT → 修改整单把订单全部换成别的菜 PATCH → 修改部分只把可乐换成雪碧 DELETE → 取消订单删除2.4 HTTP响应详解响应结构HTTP/1.1 200 OK ← 状态行协议 状态码 状态描述 Content-Type: application/json ← Content-Length: 123 ← 响应头Response Headers Server: nginx/1.18.0 ← Date: Mon, 01 Jan 2024 00:00:00 GMT ← ← 空行 {code:0,data:{name:张三}} ← 响应体Response BodyHTTP状态码状态码是服务器对请求的回答分为5大类常见状态码详解状态码含义场景测试关注点200OK请求成功验证返回数据正确性201Created创建成功验证资源是否创建204No Content删除成功验证资源是否删除301永久重定向URL已变更验证跳转是否正确302临时重定向临时跳转验证跳转是否正确400请求参数错误参数缺失/格式错误验证参数校验401未认证未登录/Token失效验证认证机制403无权限权限不足验证授权机制404资源不存在URL错误或资源已删除验证错误处理422语义错误参数格式对但逻辑错验证业务校验500服务器内部错误代码异常验证异常处理502网关错误上游服务故障验证容错机制503服务不可用服务维护/过载验证降级策略状态码记忆口诀1xx Hold on等一下 2xx Here you go给你 3xx Go away去别的地方 4xx You messed up你错了 5xx I messed up我错了2.5 HTTP请求头Request Headers请求头是客户端告诉服务器我是谁、我要什么的信息。常见请求头请求头说明示例Host目标服务器域名Host: api.example.comContent-Type请求体格式Content-Type: application/jsonAccept期望的响应格式Accept: application/jsonAuthorization认证信息Authorization: Bearer token123User-Agent客户端信息User-Agent: Mozilla/5.0...Cookie携带的CookieCookie: sessionIdabc123Content-Length请求体长度Content-Length: 56Content-Type 详解Content-Type用途示例application/json传递JSON数据{name:张三}application/x-www-form-urlencoded表单提交name张三age20multipart/form-data文件上传带boundary的分隔数据text/xmlXML数据username张三/name/usertext/plain纯文本Hello World2.6 HTTP响应头Response Headers响应头是服务器告诉客户端我是什么、怎么处理响应的信息。常见响应头响应头说明示例Content-Type响应体格式Content-Type: application/jsonContent-Length响应体长度Content-Length: 1234Set-Cookie设置CookieSet-Cookie: sessionIdabc; Path/Cache-Control缓存策略Cache-Control: no-cacheLocation重定向地址Location: https://new-url.comServer服务器信息Server: nginx/1.18.0Date响应时间Date: Mon, 01 Jan 2024 00:00:00 GMT2.7 完整的HTTP请求-响应示例场景用户登录请求POST /api/login HTTP/1.1 Host: www.example.com Content-Type: application/json User-Agent: Mozilla/5.0 Content-Length: 45 {username:admin,password:123456}响应成功HTTP/1.1 200 OK Content-Type: application/json Set-Cookie: sessionIdabc123; Path/; HttpOnly Content-Length: 56 { code: 0, message: 登录成功, data: { token: eyJhbGciOiJIUzI1NiIs..., expires: 3600 } }响应失败-密码错误HTTP/1.1 401 Unauthorized Content-Type: application/json Content-Length: 48 { code: 1001, message: 用户名或密码错误 }2.8 Cookie、Session、Token三者对比特性CookieSessionTokenJWT存储位置浏览器服务器客户端浏览器/内存安全性低可被篡改中高签名验证服务器压力小大存储Session小无状态跨域支持受限受限支持适用场景简单网站传统Web应用现代API、微服务JWT Token详解JWT结构Header.Payload.SignatureeyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjEsIm5hbWUiOiJhZG1pbiJ9.SflKxwRJSMeKKF2QT4fwpMe... ↑HeaderBase64 ↑PayloadBase64 ↑Signature签名2.9 HTTP/1.1 vs HTTP/2 vs HTTP/3特性HTTP/1.1HTTP/2HTTP/3发布年份199720152022传输层TCPTCPQUIC (基于UDP)连接复用需多个TCP连接单一TCP连接多路复用多路复用头部压缩无HPACKQPACK服务器推送无支持支持队头阻塞有TCP层有无2.10 本章实战用浏览器开发者工具观察HTTP步骤打开Chrome浏览器按 F12 打开开发者工具切换到 Network网络标签访问任意网站如 https://jsonplaceholder.typicode.com观察请求列表观察要点点击某个请求查看Headers请求头和响应头Payload请求参数Preview/Response响应数据Timing请求各阶段耗时2.11 本章小结核心知识点请求结构请求行方法 URL 版本、请求头元信息、请求体传输数据响应结构状态行版本 状态码 描述、响应头元信息、响应体返回数据请求方法GET/POST/PUT/PATCH/DELETE幂等性概念状态码2xx成功 3xx重定向 4xx客户端错 5xx服务端错认证方式Cookie/Session/TokenJWT原理必须记住的状态码类别必记状态码2xx200, 201, 2043xx301, 302, 3044xx400, 401, 403, 404, 4225xx500, 502, 503课后练习 实践题用浏览器F12访问一个网站找到一个API请求分析它的请求方法、请求头、响应状态码和响应数据。思考题为什么POST请求不是幂等的什么场景下需要幂等性设计对比题比较Cookie、Session、Token三种认证方式的优缺点什么场景适合用什么场景题设计一个用户注册接口应该用什么HTTP方法可能的返回状态码有哪些2.12 下章预告下一章我们将学习RESTful API设计规范理解如何设计优雅的接口以及如何测试RESTful接口HTTP协议是接口测试的基石掌握它你就掌握了与服务器对话的语言。