【接口自动化测试】HTTP协议详解

协议

简单理解,计算机与计算机之间的通讯语言就叫做协议,不同的计算机之间只有使用相同的协议才能通信。所以网络协议就是为计算机网络中进行数据交换而建立的规则,标准或约定的集合。

OSI模型

1978年国际化标准组织提出了“开放系统互联网参考模型”,即著名的OSI模型。它将计算机网络体系结构的通信协议划分为7层,自上而下分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。(7层网络默认具体是什么自行百度)

那么们的今天的主题HTTP协议就在应用层,也是应用层使用最多的协议

HTTP

超文本传输协议,是一种分布式,协作式的,面向应用层的超媒体信息系统。它是一种通用的,无状态的协议。

原理

HTTP协议工作于客户端与服务器的架构上,客户端通过URL向服务器发送所有的请求。服务器根据接收到的请求,向客户端发送响应信息。HTTP协议定义客户端如何向服务器发送请求,以及服务器如何将响应请求传送给客户端,所以HTTP请求协议采用了请求/响应模型

客户端

客户端主要有两个职能

1.向服务器发送请求

2.接收服务器返回的报文并解释成友善的信息供我们阅读

客户端大概有:浏览器,应用程序等

如今时代我们可能使用最多的就是浏览器, 当用户在地址栏输入网址回车时,浏览器会为什么做如下处理:

1.解析协议和域名

2.使用HTTP协议并创建请求报文向服务端发送请求

3.接收服务器返回的内容并展示给客户

 

服务端
服务器端在接收到客户端发送的请求后会开始处理请求

服务器处理过程如下

服务器软件一直在监听端口是否有新的请求达到,如iis或者tomcat在建立web站点后,默认会一直监听80端口等待HTTP请求到达服务器。

1.建立连接:如果客户端已经打开一条道服务器的持久连接,则可以直接使用,否则客户端需要在服务器打开一条新的连接

2.接收请求报文:连接上有数据到时,web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来

3.处理请求:当请求被接收后,服务器便可以根据请求报文进行处理了。例如post方法中提出报文主体的数据并插入到数据库中

4.访问资源:请求处理完后,比如web会根据数据生成一系列的HTML页面或图片等信息,此步骤将访问这些存储在服务器上的物理文件

5.构建响应:web服务器在识别资源后,构造响应报文,响应报文包括:状态码,响应头,响应主体等内容

6.发送响应:服务器将响应的数据发送给客户端机器

7.记录日志:请求结束,服务器会在日志文件中记录一条请求日志

大家都知道浏览器想客户端发送请求是通过URL地址传递的,那么接下来我们看一下URL的组成

URL
实例URL:https://i.cnblogs.com/EditPosts.aspx?postid=10913098&update=1#name

组成
URL主要有以下几个部分组成

1.协议部分

该URL的协议为HTTP

2.域名部分

该URL的域名部分为/www.kath2.com, URL中也可以使用ip地址作为域名

3.端口部分

端口部分跟在域名:后面,如果没有,那么说明URL使用的是默认端口80,端口不是URL的必须组成部分

4.虚拟目录部分

从域名后的第一个/到最后一个/之间的部分,虚拟目录也不是URL的必须组成部分

5.文件名部分

最后一个/到?号为止,是文件名部分。如果没有?号,则到#号为止,如果没有?和#号,则从域名最后/开始到结束都是文件名部分,示例中的文件名部分为EditPosts.aspx

6.锚部分

从#号到最后

7.参数部分

从?号开始到#号结束, 多个参数使用&号分割

报文
客户端与服务器之间的信息传递使用的载体叫做报文,报文分为请求和响应两个部分

请求报文
客户端发送数据给服务器的过程叫做请求

组成
请求报文分为4个部分

1.请求首行

包含请求方法,要访问的资源以及所舒勇的HTTP版本

2.请求头部

说明服务器要使用的附加信息

3.空行

请求报文头部后的空行是必须的

4.请求体

get往往不存在请求体,post请求体包含请求的参数

格式

 

实例

get请求实例

post请求实例

请求方法

主要请求方法有get,post,put,delete等

get请求

1.从服务器获取数据,返回响应的实体部分,可以类比数据库的select操作,不会影响数据库本身

2.没有请求体

3.请求参数附在URL后,以?号开始,多个参数使用&分割

4.通常对数据不敏感的请求使用get请求,因为参数跟在URL后不安全

5.传输的参数长度是有限制的

post请求

1.向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

2.通常post请求含有请求体

3.请求参数存放在请求体中,可以是任意格式

4.相对来说数据比较安全

5.请求数据无大小限制,可以认为是无限制

其他请求不做介绍

响应报文

客户端发送请求到服务器,服务器处理之后返回数据给客户端的过程叫做响应

组成

响应报文同样包含了4个部分

1.响应首行

协议版本,状态码,成功与失败的状态信息

2.响应头部

用来说明客户端要使用的一些附加信息

3.空行

响应报文头部后的空行是必须的

4.响应数据

返回给客户端的数据等信息

 

格式

实例

get响应实例

 

 post响应实例

响应状态码
HTTP扩展
Cookie机制

Cookie是什么?

大家都知道我们登录一个网站的时候,在输入帐号和密码的时候下面经常会看到一个“记住我”的选项,那么只要我们勾选了这个选项,再次登录的时候就无需再输入帐号和密码即可登录网站,那么这种方法就是通过Cookie机制实现的。用来记录用户的状态和用户的身份

Cookie是由服务器发给客户端的特殊信息,而这些信息,以文本文件的方式存在客户端,然后客户端每次向服务器发送请求的时候就会带上这些特殊信息,以便服务器做身份识别

Cookie处理过程

当用户第一次请求服务器时,请求报文中并不会包含Cookie信息,当服务器接收到客户端的请求时,会响应信息给客户端,这时候响应报文的头部会包含一个set-Cookie的字段信息,并包含了用户的身份信息。当客户端收到set-Cookie时,会把Cookie保存在本地(内存或者硬盘中)

当客户端再次发送请求报文给服务器时,请求报文头部会携带Cookie信息并发送给服务器,服务器通过Cookie自带的信息分析,动态生成与该客户端相对应的数据。

实例

第一次访问

http://120.78.128.25:8765网站,我们使用Fiddler抓取请求此网站首页的请求报文和响应报文

可以看到第一次请求次网站时,请求报文是不含有Cookie信息的,而响应报文返回一个set-Cookie给客户端

第二次访问

第二次请求的报文和响应报文,我们可以看到已经发生了变化

请求报文已经携带了Cookie信息, 而响应报文不再携带set-Cookie信息

所以说只要我们不清楚cookie信息,那么以后有效时间内,我们都可以直接访问这个网站

Session机制
Session是什么?

Session是另外一种记录客户状态和身份的机制,不同的是Cookie保存在客户端本地中, 而Session保存在服务器中

与Cookie机制作用相同,只不过Cookie是通过检查客户身上的通行证确定客户身份,而Session则是通过服务器上的客户明细表来确认客户身份

Session处理过程

当客户端第一次请求服务器时,服务器会创建一个Session并为该Session分配唯一标识Session id,并向Session中添加内容,服务器收到客户的请求后,会返回给客户端响应的信息,那么响应报文头部会携带Session id返回给客户端

当客户端再次请求服务器时,请求报文头部会携带之前的Session id(session id 是需要通过cookie传递), 服务器收到请求后根据Session id查找对应的session内容, 并分析对比是否为同一个客户端发来的请求,接着返回相应的数据给客户端

区别

最后我们通过一个生活中的实例来深入理解二者的区别

笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 

    1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。 

    2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 

    3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择

 感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

seleninum 基础及简单实践

网页自动化 1 Selenium自动化基础 1.1 Selenium简介 Selenium自动化流程如下: 自动化程序调用Selenium客户端库函数客户端库会发送Selenium命令,给浏览器的驱动程序浏览器驱动程序接收到命令后,驱动浏览器去执行命令浏览器执行命令浏览器驱…

MFC项目添加CUDA支持

文章目录 前言一、开启项目CUDA支持二、链接CUDA库三、链接cu文件 前言 我目前的项目状况是: 拥有一个MFC项目;拥有现成的 .cuh文件 和 .cu文件。 我想做的是:将.cuh和.cu文件放到我的项目中,并且编译成功跑起来 一、开启项目C…

PixCake:让你的照片焕发新生的AI人像处理技术修图软件

大家好!今天我要向大家推荐一款令人惊艳的AI人像处理技术修图软件——PixCake像素蛋糕。无论你是摄影爱好者还是普通用户,PixCake都能帮助你将照片修饰得更加出色、生动。 PixCake拥有强大的AI人像处理技术,可以自动识别照片中的人物&#x…

硬件驱动为什么要有WHQL数字签名

硬件驱动要有WHQL数字签名才能实现正常安装、启动、运行,并实现驱动静默安装。 目前的桌面操作系统中,Windows系统市场占有率处于优势,Windows 的各个版本的系统加起来几乎占领了大部分市场。所以很多工业和行业的硬件设备都要考虑兼容在Win…

SpringBoot :ch01 项目结构

前言 在本系列博客中,我们将深入探讨 Spring Boot 项目结构的各个方面,并探讨如何利用这些结构来构建健壮、可扩展的应用程序。通过深入了解 Spring Boot 项目结构,我们可以更好地利用 Spring Boot 的优势,提高开发效率&#xff…

python接口自动化测试之接口数据依赖

一般在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那又该如何继续呢? 那么有如下思路: 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时,…

Python爬虫技巧:百万级数据怎么爬取?

目录 前言 一、使用多线程/协程提高爬虫速度 1.1 使用多线程 1.2 使用协程 1.3 注意事项 二、使用代理IP解决目标网站限制爬虫的问题 三、使用分布式爬虫 四、其他一些小技巧 总结 前言 在实际的爬取过程中,我们经常会遇到一些需要大量爬取数据的情况&…

深入 Django 的 URL 分发器

概要 在 Django 的 MVC 架构中,URL 分发器扮演着至关重要的角色,它负责将用户的请求路由到相应的视图函数或类。这一机制不仅保证了 Django 应用的高度可扩展性,还为开发者提供了灵活的 URL 设计能力。本文将详细介绍 Django 中的 URL 分发器…

KT142C语音芯片客户反馈电脑端的配置文件,打开都正常,但是拷贝到KT142C内部就乱码

KT142C语音芯片客户反馈电脑端的配置文件,打开都正常,但是拷贝到KT142C内部就乱码 首先解释一下原理,KT142C内置的330Kbyte空间可供用户下载,实际上拿出程序部分的空间 作为声音存储介质的,也就是说,代码空…

安卓毕业设计:基于安卓android微信小程序的超市购物系统

运行环境 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&a…

浅谈电动汽车充电桩设计与应用研究

安科瑞 华楠 摘要:目前,随着我国社会经济的快速发展,我国的各个领域都取得了突破性的发展,尤其是在电动汽车充电桩的设计方法,新型的电动汽车充电桩设计已经广泛的受到了人民群众的青睐与认可,而这种发展前…

4本期刊被踢!11月SCI/SSCI目录已更新

​2023年11月20日,科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9481本期刊,SSCI期刊目录共包含3551本期刊。此次SCIE & SSCI期刊目录更新,与上次更新(2023年10月)相比,共…

[vxe-table] expandAll:true 当table数据更新后无法展开,只有第一次能展开才能生效的问题

:tree-config"{rowField: id,parentField: parentId,expandAll: true,reserve: true, }" :row-config"{ keyField: id, isHover: true }"参考: vxe tree expandAll:true当table数据更新后无法展开,只有第一次能展开才能…

visionOS空间计算实战开发教程Day 1:环境安装和编写第一个程序

安装 截至目前visionOS还未在Xcode稳定版中开放,所以需要下载​​Xcode Beta版​​。比如我们可以下载Xcode 15.1 beta 2,注意Xcode 15要求系统的版本是macOS Ventura 13.5或更新,也就是说2017年的MacBook Pro基本可以勉强一战,基…

nginx学习(4)Nginx 配置高可用集群(主从配置)

Nginx 配置高可用集群 Nginx的高可用集群是指由两台或多台Nginx服务器组成的集群系统,通过负载均衡和故障转移等技术,实现高可用性和可伸缩性的目标。在这种集群系统中,每个Nginx服务器都配置为主节点(master)或从节点…

7-tcp 三次握手和四次挥手、osi七层协议,哪七层,每层有哪些?tcp和udp的区别?udp用在哪里了?

1 tcp 三次握手和四次挥手 2 osi七层协议,哪七层,每层有哪些 3 tcp和udp的区别?udp用在哪里了? 1 tcp 三次握手和四次挥手 # tcp协议---》处于osi7层协议的传输层,可靠连接,使用三次握手,四次挥…

传统考勤太复杂怎么办?这个小技巧,我必须吹爆!

随着科技的不断进步,人脸识别技术在各个领域得到了广泛的应用。在企业管理和安全领域,三维人脸考勤系统成为了一种高效、准确的管理工具。 客户案例 银行 天津某银行是一家金融机构,对于安全性要求极高。传统的考勤系统无法满足他们对于员工…

Python3.11+Pyside6开发电影下载程序

VideoSave是一款使用Python3.11Pyside6编写的提供下载电影/电视剧的软件,支持注册、登录、搜索、下载、查看日志等功能,提供了Window、Mac系统安装包。 先上效果图 提供功能 节省寻找资源的时间 ⌚️模糊搜索指定影片 🐴查看影片下载日志 &…

深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序 计算机竞赛

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习?5.1.2 为什么要迁移学习? 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…

企业AI虚拟ip形象定制的应用场景

随着AI人工智能和云计算等新技术的不断发展和应用,AI智能数字人已经演化成为了更加智慧的生命体,在服务企业和人类方面有了更高质量,特别是作为品牌形象代言人,通过高逼真模拟人类的外貌、声音和行为,在使得品牌在竞争…