HTTP 协议基础知识总结(用于 Web API 接口测试)

接口测试中最常用的通讯协议就是 HTTP(Hypertext Transfer Protocol),本节旨在帮助理解 HTTP 协议的结构、工作流程以及如何用于接口测试。

一、HTTP 协议简介

HTTP 是一种客户端-服务端模型应用层协议,最初用于浏览器与网站服务器之间的数据传输。由于其结构简单、使用灵活,现在已经成为服务端与服务端、移动 App 与服务端等通信的主流协议。

常见版本

版本

特点

0.9

最初版本,仅支持 GET 方法

1.0

增加了请求头,使用 TCP 短连接

1.1

默认开启 keep-alive,复用连接(最常用)

2

支持多路复用、头部压缩等优化

3

基于 UDP 的 QUIC 协议实现


二、HTTP 通信流程

基本模型:客户端发起请求,服务端返回响应。

  • 客户端必须先发送 HTTP 请求(Request)
  • 服务端响应 HTTP 响应(Response)
  • HTTP/1.1 之前:每个请求都建立并断开连接
  • HTTP/1.1:支持连接复用(keep-alive)

注意:服务端不能主动向客户端推送消息(除非使用 WebSocket)。


三、HTTP 请求结构(Request)

HTTP 请求由 3 个部分组成:

1. 请求行(Request Line)

格式如下:

<请求方法> <请求路径> <HTTP版本>

示例:

GET /mgr/login.html HTTP/1.1
POST /api/medicine HTTP/1.1
常见请求方法

方法

含义

GET

获取资源(常用于读取数据)

POST

提交资源(常用于新增数据)

PUT

更新资源

DELETE

删除资源

PATCH

局部更新(非主流)

重点掌握 GET / POST / PUT / DELETE,用于模拟前端对后端的 CRUD 行为。


2. 请求头(Request Headers)

请求头以 键: 值 的形式呈现,描述请求的元信息。例如:

Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 51
  • Host:目标服务器地址
  • User-Agent:客户端信息(如浏览器、工具类型)
  • Content-Type:请求体的数据格式(例如 JSON)
  • Content-Length:请求体字节长度

3. 请求体(Request Body)

请求体用于提交数据(常用于 POST、PUT),常见格式:

类型

描述

application/json

JSON 格式数据

application/xml

XML 格式数据

application/x-www-form-urlencoded

表单数据(key=value&key2=value2)

multipart/form-data

上传文件或表单

例如:

name=qingmeisu&sn=099877883837&desc=清霉素药品

请求头和请求体之间必须用一个 空行 分隔。


4. URL 参数(Query String)

URL 中 ? 后面的部分叫做查询字符串,用于传递参数。例如:

https://www.baidu.com/s?wd=iphone&rsv_spt=1

解析为:

参数名

参数值

wd

iphone

rsv_spt

1

格式为 key=value,多个参数用 & 连接。


四、HTTP 响应结构(Response)

HTTP 响应也由三部分组成:

1. 响应状态行(Status Line)

格式:

<协议版本> <状态码> <状态描述>

示例:

HTTP/1.1 200 OK
常见状态码分类:

状态码段

含义

示例

2xx

成功处理请求

200 OK、201 Created

3xx

重定向

301 Moved Permanently、302 Found

4xx

客户端错误

400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found

5xx

服务端错误

500 Internal Server Error、503 Service Unavailable


2. 响应头(Response Headers)

和请求头类似,用于描述返回信息的元数据。例如:

Content-Type: application/json
Content-Length: 37
Server: WSGIServer/0.2 CPython/3.7.3

3. 响应体(Response Body)

响应体通常用于返回请求的数据内容,例如:

{"ret": 0,"retlist": [],"total": 0
}

和请求体一样,常见格式有:

格式类型

说明

JSON

常见于现代 Web API

XML

用于老旧系统或兼容需求

HTML

浏览器访问页面时

文本 / 表单数据

少见


五、接口测试中重点关注的 HTTP 要素

要素

说明

方法

使用 GET/POST/PUT/DELETE 发起不同请求

URL

接口地址,包括路径与参数

请求头

设置 Content-Type 等必要信息

请求体

提交 JSON 或表单数据等

响应状态码

判断接口是否正常返回

响应体内容

验证数据是否符合预期


六、开发者工具查看 HTTP 消息

在浏览器(如 Chrome)中,按 F12 打开开发者工具,切换至 Network 标签页,刷新页面后可以查看每个请求的详细信息,包括:

  • 请求方法 / URL / 状态码
  • 请求与响应头
  • 请求与响应体(Headers / Payload / Preview)

七、总结

理解 HTTP 协议是掌握接口测试的前提,尤其要掌握:

  • HTTP 的通信模型(请求 → 响应)
  • 请求结构(方法、头部、体)
  • 响应结构(状态码、数据格式)
  • GET / POST / PUT / DELETE 的实际含义与应用场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91509.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91509.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91509.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 DMA通信详解

STM32 DMA通信详解DMA(Direct Memory Access&#xff0c;直接内存访问)是STM32微控制器中一种重要的数据传输机制&#xff0c;它允许外设与内存之间或内存与内存之间直接传输数据&#xff0c;而无需CPU的干预。这种机制可以显著提高系统性能&#xff0c;特别是在需要高速数据传…

pytest--1--pytest-mock常用的方法

1. mocker.patch mocker.patch 是最常用的方法&#xff0c;用于替换指定的对象或方法。它可以用于模拟函数、方法、类或模块。 语法 mocker.patch(target, newDEFAULT, specNone, createFalse, spec_setNone, autospecNone, new_callableNone, **kwargs)示例 import pytest fro…

尚庭公寓----------分页查询

根据条件分页查询公寓列表 进行分页配置 package com.nie.lease.common.mybatisplus;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.in…

【图像质量评价指标】图像熵(Image Entropy) —— 熵值饱和现象

文章目录一、图像熵&#xff08;Image Entropy&#xff09;&#xff08;1&#xff09;基本原理&#xff08;2&#xff09;优势与局限&#xff08;3&#xff09;推荐策略多指标联合推荐体系噪声应对机制建议二、项目实战 —— 通过图像熵评价序列图像&#xff0c;并提取最优图像…

GaussDB in的用法

1 in的作用in运算符允许您在WHERE子句中指定多个值。 in运算符是多个OR条件的简写。2 in的语法select column_name(s) from table_name where column_name in (value1, value2, ...); 或者 select column_name(s) from table_name where column_name in (select statement);3 i…

【C语言进阶】内存函数

目录 1.memcpy函数 1.1 模拟实现 2.memmove函数 3.memcmp函数 1.memcpy函数 字符串拷贝strcpy和strncpy是有一定局限性的&#xff0c;只能拷贝字符串&#xff0c;而memcpy可以拷贝任意类型的数据&#xff0c;单位是字节。 1.1 模拟实现 #include<stdio.h> #include&l…

从乱序到整洁:Swift 实现奇偶链表重排的最佳方案

文章目录摘要描述题解答案题解代码分析分段讲解示例测试及结果时间复杂度空间复杂度总结摘要 在开发中&#xff0c;链表结构经常出现在缓存淘汰、操作系统任务调度、或是 LRU 算法中&#xff0c;尤其是对节点位置的灵活操作更是链表的强项。LeetCode 第 328 题「奇偶链表」就给…

WPF+CEF 执行JS报错

WPFCEF 执行JS报错 在WPF中执行 webBrowser.EvaluateScriptAsync(“window.scrollBy(0, 1000);”); 在部分网站会报异常&#xff1a; Request BrowserId : XXXX not found it’s likely the browser is already closed环境 .Net Framework 4.7 CefSharp.Wpf 131.3.50 解决方案&…

【Python3-Django】快速掌握DRF:ModelViewSet实战指南

DRF讲解 1. 什么是 Django 和 Django REST Framework&#xff1f; 在深入 ModelViewSet 之前&#xff0c;我们先简单了解一下背景知识&#xff1a; Django 是一个基于 Python 的 Web 开发框架&#xff0c;旨在帮助开发者快速构建安全、可扩展的 Web 应用。它遵循“不要重复自己…

TRAE IDE** 下载、安装、开发、测试和部署 2048 小游戏的全流程指南

以下是一份完整的 TRAE IDE 下载、安装、开发、测试和部署 2048 小游戏的全流程指南。整个过程基于 TRAE 作为 AI 辅助编程工具的特性&#xff08;对标 Cursor/AWS Kiro&#xff09;&#xff0c;假设它支持智能代码生成和云部署功能。 【插播】腾讯云AI Coding大赛https://mar…

重学前端005 --- 响应式网页设计 CSS 盒子模型

文章目录BOX 盒子概念CSSoverflow: hidden;filter: blur(3px);box-shadow: 0 0 3px 3px #efb762;border-radius: 30px 25px 60px 12px;transform: rotate(-0.6deg);每个 HTML 元素都是一个盒子&#xff0c;它拥有着自己的间距和边框。这叫作“盒子模型”。 BOX 盒子概念 内容…

TC500R立式加工中心主轴箱机械结构设计cad【11张】三维图+设计说明书

TC500R立式加工中心主轴箱机械结构设计 摘 要 数控机床作为工业制造的基础&#xff0c;在国家的发展中起着非常重要的作用。随着我国经济的快速发展&#xff0c;我国已经成为工业制造大国&#xff0c;制造业的发展离不开数控机床&#xff0c;而TC500R立式加工中心作为数控机床…

CSS Grid布局:构建现代网页的强大网格系统

目录 一、Grid布局基础概念 1.1 网格容器与网格项 1.2 创建基本网格 二、核心属性详解 2.1 定义网格轨道 2.2 网格间距控制 2.3 网格项对齐方式 三、实战布局技巧 3.1 创建经典布局 3.2 网格项定位技巧 3.3 响应式网格设计 四、Grid布局 vs Flexbox布局 五、高级…

Elasticsearch / MongoDB / Redis / MySQL 区别

1、一句话简介名称核心用途Elasticsearch强大的全文检索与日志分析引擎MongoDB灵活的文档数据库&#xff0c;适合半结构化/结构化数据Redis高性能的内存键值缓存数据库&#xff0c;用于实时高并发处理MySQL经典关系型数据库&#xff0c;强事务支持&#xff0c;结构化数据持久存…

网络通信之基础知识

一、什么是计算机网络&#xff1f;计算机网络是指由若干主机、通信链路和网络设备&#xff08;如路由器、交换机等&#xff09;组成的系统&#xff0c;借助通信协议&#xff0c;实现信息共享和资源互联。其本质是&#xff1a;多台设备之间通过协议进行数据交换。二、网络协议与…

Java 设计模式及应用场景

Java 设计模式是解决软件开发中常见问题的通用方案&#xff0c;通过合理的设计模式可以提高代码的可维护性、可扩展性和复用性。下面将介绍 Java 中常见的设计模式及其原理。一、设计模式的分类设计模式主要分为三大类&#xff0c;共 23 种经典模式&#xff1a;创建型模式&…

GitHub Jekyll博客本地Win开发环境搭建

GitHub Jekyll博客本地Win开发环境搭建 标签 后端 blog jekyll 全文链接 GitHub Jekyll博客本地Win开发环境搭建 概述 本文详细介绍了在Windows系统上搭建Jekyll博客本地开发环境的完整步骤&#xff0c;为GitHub Pages博客开发提供本地预览和调试能力。 环境依赖 Ruby环…

浏览器防录屏是怎样提高视频安全性?

文章目录前言一、什么是浏览器防录屏二、浏览器防录屏的原理是什么&#xff1f;&#xff08;javascript&#xff09;三、如何实现浏览器防录屏总结前言 在数字内容版权保护面临严峻挑战的今天&#xff0c;浏览器防录屏技术作为视频安全体系的关键一环&#xff0c;其重要性日益…

uni-app项目配置通用链接拉起ios应用android应用

uniapp开发ios&android可拉起app的辛酸历程IOS配置指南1、登录[apple Developer](https://developer.apple.com/account/resources/identifiers/list)账户找到自己开发的对应的项目2、确保对应项目的Associated Domains是打开状态3、本地创建一个 apple-app-site-associati…

deep learning(李宏毅)--(六)--loss

一&#xff0c;关于分类问题及其损失函数的一些讨论。 在构建分类模型是&#xff0c;我们的最后一层往往是softmax函数&#xff08;起到归一化的作用&#xff09;&#xff0c;如果是二分类问题也可以用sigmoid函数。 在loss函数的选择上&#xff0c;一般采用交叉熵损失函数(…