HTTP协议是什么?

超文本传输协议(HTTP)是一种为分布式、协作式的,面向应用层的超媒体信息系统。它是一种通用的、无状态(stateless)的协议,除了应用于超文本传输外,它也可以应用于如名称服务HTTP是建立在统一资源标识符(URI)的约東上的,作为一个地址(URL)或名称(URN)以指定被一个方法使用的资源。消息是以一种类似于互联网邮件消息格式来传输的,互联网消息格式定义于多目的互联网邮件扩展(MIME)里。它也是用手用户代理(useragents)和其他互联网系统的代理网关之间通信的通信协议,HTTP允许不同的应用程序对资源进行基本的超媒体访问。

HTTP/1.0没有充分考虑到分层代理、缓存以及持久连接和虚拟主机的需求的影响。并且随着不完善的HTTP/1.0应用程序的激增,迫切需要一个新的版本,以便使两个通信程序能够确定彼此的真实能力。此规范定义的协议叫作“HTTP/1.1”,这个协议与HTTP/1.0相比,更为严格,以确保各个协议的特征得到可靠实现。

以上官网定义会显得非常难以理解。要明白HTP协议,测试人员必须要先理解一些术语的含义。它们是HTTP通信中各参与者和对象扮演不同角色的说明。

连接(connection)

为通信而在两个程序间建立的传输层虚拟电路。

消息(message)

HTTP通信中的基本单元。它由一个结构化的八比特字节序列组成,与第4章定义的句法相

匹配,并通过连接得到传送。

请求(request)

种HTTP请求消息,从客户端到服务器的消息叫请求消息。

响应(response)

种HTTP响应消息,从服务器返回到客户端的消息叫响应消息

资源(resource)

一种网络数据对象或服务。资源可以有多种表现方式(如多种语言、数据格式、大小和分辨

率)或者是根据其他方面而不同的表现形式。

实体(eniy)

实体是请求或响应的有效承载信息。一个实体包含元信息和内容,元信息以实体头域(entityheaderfield)形式表示,内容以消息主体(entity-bocy)形式表示

表现形式(representation)

一个响应包含的实体是由内容协商(contentnegotiation)决定的。有可能存在一个特定的响应状态码对应多个表现形式。这里向大家推荐一个测试交流裙:1007119548。

内容协商(contentnegotiation)

当服务一个请求时选择资源的一种适当的表示形式的机制(mechanism)。任何响应里实体的表现形式都是可协商的(包括错误响应)。

变量(variant)

在某个时刻,一个资源对应的表现形式(representation)可以有一个或多个(译注:一个URI请求一个资源,但返回的是此资源对应的表现形式,这根据内容协商决定)。每个表现形式(representation)被称作一个变量。“变量”这个术语的使用并不意味着资源(resource)是由内容协商决定的。

客户端(client)

为发送请求建立连接的程序。

用户代理(useragent)

初始化请求的客户端程序。常见的如览器、编辑器、蜘蛛(可网络穿越的机器人),或其他的终端用户工具。

服务器(Server)

服务器是这样一个应用程序,它同意请求端的连接,并发送响应(response)。任何给定的程序都有可能既做客户端,又做服务器。我们使用这些术语是为了说明特定连接中应用程序所担当的角色,而不是指通常意义上应用程序的能力。同样,任何服务器都可以基于每个请求的性质扮演源服务器、代理、网关,或者隧道等角色之一。

源服务器(Originserver)

存在资源或者资源在其上被创建的服务器(Server)被称为源服务器(Originserver)

代理(Proxy)

代理是一个中间程序,它既可以担当客户端的角色,也可以担当服务器的角色。代理代表客户端向服务器发送请求。客户端的请求经过代理,会在代理内部得到服务或者经过一定的转换转至其他服务器。一个代理必须能同时实现本规范中对客户端和服务器所做的要求。透明代理(transparentproxy)需要代理认证和代理识别,而不修改请求或响应。非透明代理(nontransparentproxy)需修改请求或响应,以便为用户代理(useragent)提供附加服务,附加服务包括组注释服务、媒体类型转换、协议简化或者匿名过滤等。除非透明行为或非透明行为被显式地声明,否则,HTTP代理既是透明代理,也是非透明代理。

网关(gateway)

网关其实是一个服务器,扮演着代表其他服务器为客户端提供服务的中间者。与代理(proxy)不同,网关接收请求,仿佛它就是请求资源的源服务器。请求的客户端可能觉察不到它正在同网关通信。

隧道(tunnel)

道也是一个中间程序。它是一个在两个连接之间充当目中维(blindrelay)的中间程序处于活动状态。它不能被认为是这次P通信的参与者、虽然TP请求可能已经把它初始化了。当两端的中维连接都关闭的时候,道不再存在。

缓存(cache)

缓存是程序响应消息的本地存储。缓存是一个子系统,控制消息的存储、获取和除。缓存里存放可缓存的响应(cacheableresponse),为的是减少对将来同样请求的响应时间和网络带宽消耗。任一客户端或服务器都可能含有缓存,但缓存不能存在于一个充当隧道(tunnel)的服务器里。

可缓存的(cacheable)

响应(response)是可缓存的是指可以将这个响应缓存(cache)保存为副本,之后能用此副本继续响应后续的请求。但即使一个资源(resource)是可缓存的,也可能会出现由于请求本身的约束造成缓存副本不能被使用的情况。

第一手的(first-hand)

如果一个响应直接从源服务器或经过若干代理(proxy),并且没有不必要的延时,最后到达客户端,那么这个响应就是第一手的(first-hand)。如果响应通过源服务器(originServer)验证是有效性(validity)的,那么这个响应也同样是第一手的。

显式过期时间(explicitexpirationtime)

显式过期时间是源服务器认为实体(entity)在没有被进一步验证(validation)的情况下,缓存(cache)不应该利用其去响应后续请求的时间(译注:也就是说,当响应的显式过期时间达到后,缓存必须要对其级存的副本进行重验证。否则就不能利用此副本去响应后续请求)。

启发式过期时间(heuristicexpirationtime)

当没有显式过期时间(explicitexpirationtime)可利用时,由缓存指定过期时间。

年龄(age)

一个响应的年龄是从被源服务器发送或被源服务器成功验证到现在的时间。

保鲜寿命(freshnesslifetime)

一个响应产生到过期之间的时间

保鲜(Fresh)

如果一个响应的年龄还没有超过保鲜寿命(freshnesslifetime),那么它就是保鲜的。

陈旧(Stale)

一个响应的年龄已经超过了它的保鲜寿命(freshnesslifetime),那么它就是陈旧的。

语义透明(semanticallytransparent)

缓存(cache)可能会以一种语意透明(semanticallytransparent)的方式工作。这时,对于一个特定的响应,使用缓存既不会对请求客户端产生影响,也不会对源服务器产生影响,缓存的使用只是为了提高性能。当缓存(cache)具有语意透明时,客户端从缓存接收的响应跟直接从源服务器接收的响应完全一致(除了使用hop-by-hop头域)。

验证器(Validator)

验证器其实是协议元素如实体标签(entitytag)或最后修改时间(last-modifiedtime)等,这些协议元素被用于识别缓存里保存的副本(缓存项)是否等价于源服务器的实体的副本。

上游下游(upstream/downstream)

上游和下游描述了消息的流动:所有消息都是从上游流到下游的。

内向外向(inbound/outbound)

内向和外向指的是消息的请求和响应路径:“内向”即“移向源服务器”,“外向”即“移向用户代理(useragent)

把HTTP协议的官方定义进行归纳,得出HTTP协议的4个关键点。

(1)HTTP是建立在TCP/IP协议之上,面向应用层的超文本传输协议。

(2)它由请求和响应组成,完全符合标准的客户端服务器的请求响应模型。

(3)协议很轻便简单,并且请求与请求间没有关联,是无状态性的协议。

(4)为了弥补这种无状态性就需要使用HTP协议的扩展Cookie等方式建立关联。

结语

感谢您的观看,如有不足之处,欢迎批评指正。

获取资料

本次给大家推荐一个免费的学习群,里面概括Python/性能/接口/安全/自动化软件测试以及面试资源等。
对测试感兴趣的同学,欢迎加入Q群:1007119548,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成。

HTTP专业术语,你了解多少?的更多相关文章

  1. AngularJS in Action读书笔记1——扫平一揽子专业术语

    前(fei)言(hua): 数月前,以一个盲人摸象的姿态看了一些关于AngularJS的视频书籍,留下了我个人的一点或许是指点迷津或许是误人子弟的读后感.自以为已经达到熟悉ng的程度,但是因为刚入公司 ...

  2. 学习PS必须弄懂的专业术语

    在学习PS的过程中,我们经常会遇到一些专业术语,下面我们来对一些常用的.比较难理解的术语进行简单讲解. 像素:像素是构成图像的最基本元素,它实际上是一个个独立的小方格,每个像素都能记录它所在的位置和颜 ...

  3. ANTLR v4 专业术语集

    记录<The Definitive ANTLR 4 Reference>中出现的专业术语: grammar 文法,一种形式化(formal)的语言描述. syntax 语法 phrase ...

  4. LoRa---她的简介和她的专业术语

    LoRa是LPWAN(低功耗广域网)通信技术的一种,其作用距离超过 15 公里,连接节点可达 100 万个.低功耗与长距离极限的组合可将最大数据速率提升至每秒 50千比特(Kbps). LoRa 是  ...

  5. 大数据之kafka-02.搞定kafka专业术语

    02.搞定kafka专业术语 在kafka的世界中有很多概念和术语是需要我们提前理解并且熟练掌握的,下面来盘点一下. 之前我们提到过,kafka属于分布式的消息引擎系统,主要功能是提供一套完善的消息发 ...

  6. HR,OA,CRM,DRP,ERP什么意思?电商行业的特点?电商行业模式?专业术语?

    HR,OA,CRM,DRP,ERP HR----Human Resource人力资源管理 OA----Office Automation办公自动化 CRM---Customer Relationshi ...

  7. SAP模块一句话入门(专业术语的理解)

    SAP模块一句话入门(专业术语的理解) SAP一句话入门:Financial & Controlling Accounting (FICO) 财务,财务,呵呵,让我们关心一下给我发工资的部门. ...

  8. Android开发 音视频开发需要了解的专业术语知识

    前言 在摸索一段时间的音视频开发后,越来越发现这个坑的深度真是特别的深. 除了了解Android自带的音视频处理API以外,还得了解一些视频与音频方面的知识.这篇博客就是主要讲解这方面的专业术语.内容 ...

  9. 第2节 storm实时看板案例:11、实时看板综合案例工程构建,redis的专业术语

    redis当中的一些专业术语: redis缓存击穿 redis缓存雪崩 redis的缓存淘汰 =========================================== 详见代码

  10. seo搜索优化教程05-SEO常用专业术语

    SEO常用的专业术语很多,星辉信息科技专门抽空进行了整理,主要如下:. SEO 根据搜索引擎规则来进行搜索引擎优化,进而使得在搜索结果中获得较好的排名 关键词 关键词也叫keywords,表示在搜索引 ...

随机推荐

  1. ModuleNotFoundError: No module named 'pymysql'

    出现此提示表示系统中没有安装PyMySQL,可以通过pip PyMySQL进行安装. 安装之后,执行import pymysql仍然不可用! why? 检查后发现系统中存在python2与python ...

  2. [oracle/java/sql]用于上十万批量数据插入Oracle表的Java程序

    程序下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 原理:Oracle的Insert al ...

  3. Gradle 教程: 教你配置全局国内仓库,解决新建项目卡顿,下载构建慢等问题

    想必各位从Maven 转过来的大佬们,对于maven中配置国内仓库的方法还记忆深刻.通过/用户目录下/.m2/settings.xml 局部配置或者修改全局配置.不过没有接触过maven 也不要紧,可 ...

  4. shell 备份mysql

    shell脚本备份mysql,放在crontab中,可以作为每日测试用数据库备份 #!/bin/bash string_time=`date +%Y%m%d%H%M`; file_path=`date ...

  5. 列表初始化 分析initializer_list<T>的实现

    列表初始化(1)_统一初始化 1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑.因为可以用 ...

  6. .netcore里使用StackExchange.Redis TimeOut 情况解决方法

    在用StackExchange.Redis这个组件时候,时不时会出现异常TimeOut解决方法如下, 解决方法: 在Program的Main入口方法里添加一句话: System.Threading.T ...

  7. layui弹出层layer的area过大被遮挡

     layer弹出窗口在弹出时指定了area,弹出后,如果当前页面(iframe)大小比弹出的窗口小,那么就会出现无法操作弹出窗口的尴尬情况.如图: 弹出窗口比当前页面大,这时,唯有放大整个页面才能看到 ...

  8. python2 手动安装更新pip

    现在对于python2版本,直接修改python.exe名字为python2.exe,命令python2 -m pip install --upgrade pip --force-reinstall可 ...

  9. 小于K的两数之和

    给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K但尽可能地接近 K,返回这两个元素的和. 如不存在这样的两个元素,请返回 -1. 示例1: 输入:A = [34,23 ...

  10. shell中 >/dev/null 2>&1是什么意思

    原文地址:http://juke.outofmemory.cn/entry/295292 我们经常能在 shell 脚本中发现 >/dev/null 2>&1 这样的语句.以前的我 ...