【接口测试】HTTP协议

一、HTTP 协议基础

HTTP 简介

HTTP 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通常是由客户端发起一个请求,创建一个到服务器的 TCP 连接,当服务器监听到客户端的请求时,便会向客户端返回一个状态和内容。如下图所示,便是客户端发起请求,服务端响应的一个简单过程。

HTTP 工作原理 

HTTP工作原理主要涉及客户端和服务器之间的交互。

  1. 当我们在浏览器中输入网址并回车后,浏览器会向服务器发送一个HTTP请求。这个请求由多个部分组成,包括请求行、头部和正文。请求行包含请求方法、请求URI和HTTP版本号,如GET、POST、PUT、DELETE等。请求URI指定了要访问的资源的位置。HTTP版本号表示请求所使用的HTTP协议版本。头部包含了一系列的键值对,用于向服务器传递一些请求信息。例如,Accept表示客户端可以接受的响应内容类型,User-Agent表示客户端的浏览器信息,Referer表示客户端从哪个页面跳转而来等等。正文是可选的,用于向服务器传递一些数据。例如,当客户端向服务器提交表单时,表单数据就可以放在请求的正文中。
  2. 服务器接收到请求消息后,根据请求消息的URL和相应的处理逻辑,生成服务器响应消息,并将其发送给客户端。响应消息中包含协议版本、状态码、响应头和响应体等信息。状态行包含HTTP版本号、状态码和状态短语。HTTP版本号表示响应所使用的HTTP协议版本。状态码是一个三位数字,用于表示服务器对请求的处理结果,如200表示成功、404表示未找到资源、500表示服务器内部错误等等。状态短语是对状态码的简短描述,例如200对应的状态短语是OK,404对应的状词短语是Not Found。头部包含了一系列的键值对,用于向客户端传递一些响应信息。例如,Content-Type表示响应内容的类型,Content-Length表示响应内容的长度,Set-Cookie表示服务器要求客户端保存一个Cookie等等。正文是响应的实际内容。例如,当客户端请求一个网页时,网页的HTML代码就可以放在响应的正文中。
HTTP 特点 

  1. 支持客户/服务器模式:HTTP协议支持客户/服务器模式,客户端向服务器发起请求并接收响应。
  2. 简单快速:HTTP协议简单且快速,客户端向服务器发送请求时只需传送请求方法和路径,响应也较为迅速。
  3. 灵活:HTTP允许传输任意类型的数据对象,具有灵活性,这意味着它不仅可以传输文本,还可以传输图片、音频、视频等非文本数据。
  4. 无连接:HTTP协议无连接,即限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户端的应答后,即断开连接,以节省资源。
  5. 无状态:HTTP协议无状态,每个请求都是独立的,这意味着服务器不会保存之前和现在的请求和响应之间的关联。
HTTP 和 HTTPS

上面介绍 HTTP 的工作原理和特点,看起来是一个很不错的协议,但是 HTTP 也存在许多不足,特别是在安全方面。HTTP 通信使用明文传输,并且在通信中是不验证通信方的身份,也无法证明报文是完整的,因此使用 HTTP 通信有可能使内容被窃听,通信方身份被伪装,报文遭篡改。

HTTP 协议中是没有加密机制,但是可以和 SSL(Secure Socket Layer )或 TLS(Transport Layer Security)组合使用,从而加密 HTTP 的通信内容。即出现了 HTTPS。HTTPS 中的 S 可以理解为是 Secure,是以安全为目标的 HTTP 通道。大家可以这样理解 HTTPS = HTTP + 加密 + 认证 + 完整性保护。

细心的同学应该会发现,在一些大型网站,特别是银行、支付等网站使用的都是 HTTPS,因为它更安全。

二、HTTP 协议介绍

1.URL

URL:是互联网上标准资源的地址,一般称为统一资源定位符。
组成: 协议 :// hostname[:port] / path / [? 查询参数1 & 查询参数2]

如:

2. HTTP协议

HTTP:超文本传输协议,基于请求与响应的应用层协议。
作用:规定了客户端与服务器之间信息传递规范,是二者共同遵守的协议。
组成:
  • HTTP请求:定义请求数据格式      请求、请求、请求
  •  HTTP响应:定义响应数据格式     状态、响应、响应

我们以瑞吉外卖项目为例,在登录界面发送了一个请求,按住F12进行调试:

1.请求行

位置:请求数据 第一行
作用:说明 请求方法 访问的资源 、协议版本

请求行分为三个部分:请求方法、请求地址 URL 和 HTTP 协议版本,它们之间用空格分割。例如下图中的:POST /employee/login HTTP/1.1。

请求方法

HTTP/1.1 中定义的请求方法有 8 种,分别是 GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。GET 和 POST 是最常见的两种请求方法。如果是 RESTFul 接口则是 GET、POST、DELETE、PUT。

GET:从服务器获取资源
POST:在服务器新建一个资源
PUT:在服务器更新资源
DELETE: 从服务器删除资源

协议版本

协议版本的格式为:协议名称/主版本号.次版本号,常见的有 HTTP/1.0 和 HTTP/1.1。

2.请求头

位置:请求数据第二行到空白行之间

作用:通知服务器客户端请求信息

特点:请求头部由 键值对 组成,每行一对
Content-Type:请求体数据类型
  • text/html:HTML格式
  • image/jpeg:jpg图片格式
  • application/json:JSON数据格式
  • application/x-www-form-urlencoded: 表单默认的提交数据格式
  • multipart/form-data:在表单中进行文件上传时使用

3.请求体

 

4.响应 

位置:响应数据 第一行
作用:描述服务器处理结果
内容: 状态行由协议版本号、 状态码 、状态消息组成

分为三个部分:HTTP 协议版本、状态码和状态码描述,它们之间用空格分割。例如 HTTP/1.1 200 OK

  • HTTP 协议版本:与请求行中的协议版本一致,格式为:协议名称/主版本号.次版本号,常见的有 HTTP/1.0 和 HTTP/1.1。
  • 状态码:表示网页服务器超文本传输协议响应状态的 3 位数字代码。第一个数字代表当前响应的类型。例如 1xx 表示请求已经被服务器接收,需要继续处理。
  • 状态码描述:也叫状态描述,是对状态码的一个说明。
HTTP 常见响应码

我们经常会听到开发人员说,200、404、500 等数字,其实说的就是状态码。

HTTP 状态码(HTTP Status Code)由三个十进制的数字组成。状态码的第一个数字定义了状态码的类别,HTTP 状态码总共有五种类别,如下所示:

  • 1xx:信息。表示服务器接收到请求,需要继续处理。
  • 2xx:成功。请求已经被成功接收并处理。
  • 3xx:重定向。需要客户端采取进一步操作才能完成请求。
  • 4xx:客户端错误。客户端发送的请求有语法错误或者请求无法实现。
  • 5xx:服务端错误。服务器在处理请求的过程中发生了错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。

下面列举出一些常见的状态码:

状态码英文名描述
100Continue客户端应当继续发送请求
101Switching Protocols服务器根据客户端的请求切换协议
200OK请求成功。请求所希望的响应头或数据体将随此响应返回
203Accepted服务器已经接受请求,但未处理完成
204No Content服务器成功处理,但未返回内容
301Moved Permanently请求的资源已被永久的移动到新 URI,浏览器会自动定向到新 URI
305Use Proxy被请求的资源必须通过代理才能被访问
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
403Forbidden服务器理解请求,但是拒绝执行此请求
404Not Found请求失败,服务器上无法找到请求的资源
500Internal Server Error服务器内部错误,无法完成请求
503Service Unavailable由于超载或系统维护,服务器暂时无法处理客户端的请求
505HTTP Version not supported服务器不支持,或者拒绝支持请求中使用的 HTTP 协议的版本

 5.响应头

响应头部用来说明客户端需要使用的一些附加信息。与请求头部类似,包含若干个属性,每行一对,传递着固定的信息。格式为:属性名:属性值。下面列举一些响应头部内容。

响应头说明示例
Server服务器应用程序软件的名称和版本Server: Tengine
Date此消息被发送时的日期和时间Date: Tue, 15 Jun 2021 11:28:29 GMT
Content-Type当前文档的 MIME 类型Content-Type: text/html; charset=utf-8
Content-Encoding当前文档使用的编码方式Content-Encoding: br
Expires超过该时间则认为文档已经过期Expires: Fri, 01 Jan 1990 00:00:00 GMT

6.响应体

作用:服务器返回的数据实体

特点: 有图片、json、xml、html等多种类型

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

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

相关文章

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 C: 班级活动

[蓝桥杯 2023 国 B] 班级活动 【问题描述】 小明的老师准备组织一次班级活动。班上一共有 n n n 名( n n n 为偶数)同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 n n …

以太坊智能合约的历史里程碑: 从DAO到数据隐私的技术演进

文章目录 系列文章目录前言一、时间线 项目介绍总结 前言 在短短的几年内,以太坊不仅成为了去中心化应用和智能合约的主导平台,而且也见证了区块链技术和应用的多次重大革命。本文详细回顾了自2016年至今,以太坊生态所经历的几个关键时刻与技…

leetcodetop100(29) K 个一组翻转链表

K 个一组翻转链表 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改…

React Native搭建Android开发环境

React Native搭建Android开发环境 搭建Android开发环境一、下载JDK二、安装Android Studio2.1 配置 ANDROID_HOME 环境变量 三、初始化项目 搭建Android开发环境 我的电脑是windows系统,所以只能搭建Android,如果电脑是mac,既可以搭建Androi…

修改sqlmap-Tamper脚本

修改sqlmap-Tamper脚本 文章目录 修改sqlmap-Tamper脚本1 sqlmap官网2 sql注入漏洞注入尝试3 环境:sqli-labs/Less-26a/3.1 尝试宽字节注入: 3.2 sqlmap使用3.3准备修改sqlmap使用 4 sqlmap中-tamper工厂(输入输出)4.1 [参考文章:…

蓝桥杯 题库 简单 每日十题 day11

01 质数 质数 题目描述 给定一个正整数N,请你输出N以内(不包含N)的质数以及质数的个数。 输入描述 输入一行,包含一个正整数N。1≤N≤10^3 输出描述 共两行。 第1行包含若干个素数,每两个素数之间用一个空格隔开&…

rust生命期

一、生命期是什么 生命期,又叫生存期,就是变量的有效期。 实例1 {let r;{let x 5;r &x;}println!("r: {}", r); }编译错误,原因是r所引用的值已经被释放。 上图中的绿色范围’a表示r的生命期,蓝色范围’b表示…

pygame实现跳跃发射子弹打怪效果

import pygame import sys,time,random from pygame.locals import * pygame.init() # 设置按下鼠标的时候一直触发 pygame.key.set_repeat(10, 10) # 加载背景图片 bg pygame.image.load(./img/bg.png) # 加载左方向行走和站立图片 heroLStand pygame.image.load(img/heroLs…

传统遗产与技术相遇,古彝文的数字化与保护

古彝文是中国彝族的传统文字,具有悠久的历史和文化价值。然而,由于古彝文的形状复杂且没有标准化的字符集,对其进行文字识别一直是一项具有挑战性的任务。本文介绍了古彝文合合信息的文字识别技术,旨在提高古彝文的自动识别准确性…

十七,IBL-打印各个Mipmap级别的hdr环境贴图

预滤波环境贴图类似于辐照度图,是预先计算的环境卷积贴图,但这次考虑了粗糙度。因为随着粗糙度的增加,参与环境贴图卷积的采样向量会更分散,导致反射更模糊,所以对于卷积的每个粗糙度级别,我们将按顺序把模…

【单片机】11-步进电机和直流电机

1.直流电机 1.什么是电机 电能转换为动能 2.常见电机 (1)交流电机【大功率】:两相【200W左右】,三相【1000W左右】 (2)直流电机【小功率】:永磁【真正的磁铁】,励磁【电磁铁】 &…

3种Renko图表形态FPmarkets3秒轻松判断价格走势

Renko图表形态在交易中的应用并不逊色于其他技术分析方法。相较于普通的烛台图表,使用Renko图表时,有些经典模式更容易被发现和识别,FPmarkets总结这些模式包括: 首先是头和肩膀形态。这是一种价格反转形态,由两个较小…

华为智能企业远程办公安全解决方案(1)

华为智能企业远程办公安全解决方案(1) 课程地址方案背景需求分析企业远程办公业务概述企业远程办公安全风险分析企业远程办公环境搭建需求分析 方案设计组网架构设备选型方案亮点 课程地址 本方案相关课程资源已在华为O3社区发布,可按照以下…

Java编码技巧:验证码

目录 1.1、EasyCaptcha(优选,支持种类多,样式多,使用简单)1.1.1、作用1.1.2、官方信息1.1.3、使用案例1.1.4、依赖1.1.5、代码1.1.6、效果1.1.7、拓展 1.2、kaptcha1.2.1、作用1.2.2、官方信息1.2.3、使用案例1.2.4、依…

SLAM从入门到精通(amcl定位使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 学习slam,一般就是所谓的边定位、边制图的知识。然而在实际生产过程中,比如扫地机器人、agv、巡检机器人、农业机器人&…

聊一聊JDK21-虚拟线程

目录 前言 Virtual Threads的开始 为什么需要Virtual Threads JDK19 预览版初次出现 JDK21 Virtual Threads的正式发布 Virtual Threads 该怎么使用 简单聊聊Virtual Threads的实现 使用时候的注意事项 本地尝鲜一下JDK21及Virtual Threads 结语 前言 2023年9月19日…

字符串改错题(找出代码中所有错误,将一个字符串倒序)

#include "string.h" main() {char *pSrc "hello,world";char *pDest NULL; int iLen strlen(pSrc);pDest (char*)malloc(iLen);char *pD pDest;char* pS pSrc[iLen]; while(iLen--!0){pD pS--;}printf("%s", pDest);return 0; }在使用 m…

C理解(五):编译,链接库,宏,关键字,变量

编译 编译过程 文件.c->(预处理)->文件.i->(编译)->文件.S->(汇编)->文件.o->(链接)->elf程序 预处理 内容:加载头文件(#include),清除注释(//,./*),替换条件编译(#if #elif #endif #ifdef),替换宏定义(#define) …

探索社会工程的深度:从定义到高级攻击策略

在广阔的网络安全领域,社会工程作为一种微妙的威胁而出现,它利用人类的漏洞来访问敏感信息或实施欺诈。网络安全背景下的社会工程的定义很明确:它包括使用欺骗手段操纵个人泄露机密或个人信息,然后将这些信息用于欺诈目的。 此类…

【AI视野·今日CV 计算机视觉论文速览 第257期】Fri, 29 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Fri, 29 Sep 2023 Totally 99 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning to Transform for Generalizable Instance-wise Invariance Authors Utkarsh Singhal, Carlos Esteves, Ameesh M…