HTTP协议原理详解

article/2025/3/14 10:49:19

文章目录

  • TCP协议与HTTP协议
    • TCP 和HTTP的渊源
    • HTTP 的版本
      • HTTP/0.9
      • HTTP/1.0
      • HTTP/1.1
      • HTTP/2.0
    • HTTP/1.1相较于 HTTP/1.0 协议的区别
      • HTTP1.0运行方式
      • HTTP1.1运行方式
    • HTTP/2.0 与HTTP/1.1 的区别
      • 区别:
      • HTTP/2为什么是二进制
      • HTTP/2多路传输
      • 消息头为什么需要压缩
      • 服务器推送的好处
    • HTTP名词解释
    • HTTP 与端口
    • HTTP协议报文
      • 请求方法,标明客户端希望服务器对资源执行的动作
    • HTTP 状态码
    • HTTPS
    • 总结

TCP协议与HTTP协议

  • 1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),为HTTP超文本传输协议标准架构的发展奠定了根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1

TCP 和HTTP的渊源

  • 很多读者对TCP协议与HTTP协议存在疑问,这两者有什么区别呢,

  • 从应用领域来说,TCP协议主要用于数据传输控制,而HTTP协议主要用于应用层面的数据交互,本质上两者没有可比性。HTTP协议属于应用层协议,是建立在TCP协议基础之上HTTP协议以客户端请求和服务器端应答为标准,浏览器通常称为客户端,而WEB服务器称之为服务器端。客户端打开任意一个端口向服务端的指定端口(默认为80)发起HTTP请求,首先会发起TCP三次握手,TCP三次握手的目的是建立可靠的数据连接通道,TCP三次握手通道建立完毕,进行HTTP数据交互

  • C/S服务模式

  • http事务:http协议的一次请求(request)和响应(response)的过程就称之为http事务

    • 当客户端请求的数据接收完毕后,HTTP服务器端会断开TCP连接,整个HTTP连接过程非常短(四次挥手)。HTTP连接也称为无状态的连接,无状态连接是指客户端每次向服务器发起HTTP请求时,每次请求都会建立一个新的HTTP连接,而不是在一个HTTP请求基础上进行所有数据的交互。

    • HTTP协议是无状态协议,服务器无法追踪来源

HTTP 的版本

HTTP/0.9

  • 最原始版本,功能简陋。
  • 只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。
  • 由于该版本不支持POST方法,所以客户端无法向服务器传递太多信息。

HTTP/1.0

  • 第一个在通讯中指定版本号的HTTP协议版本,常用于代理服务器。
  • 成为了面向事务的应用层协议,该协议需要每请求一次响应建立并拆除一次连接,
  • 引入了POST和HEAD命令
  • 相对于一版本在一定程度上保障的数据的传输安全,是一个典型的串行连接事务。
    • 缺点: 串行处理,效率低下

HTTP/1.1

  • 引入持久连接机制并被默认采用,且更好的配合代理服务器工作
  • 支持管道方式同一连接下同时发送多个请求,以降低线路负载,提高传输速度
  • 新增方法: PUT、PATCH、OPTIONS、DELETE
    • 缺点: 同一TCP连接里,所有通信按次序进行,服务器只能顺序处理回应,如果前面处理过慢,会有许多请求排队,造成队头阻塞(Head-of-line blocking)

HTTP/2.0

  • 2015年,HTTP/2 发布。它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。

  • 头信息和数据体都是二进制,称为头信息帧和数据帧
    复用TCP连接(多工),在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)

  • 引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度

  • HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)

  • 大幅度提升了web性能,减少网络延迟,通常用于https

HTTP/1.1相较于 HTTP/1.0 协议的区别

HTTP1.0运行方式

在这里插入图片描述

  • 基于HTTP协议的客户/服务器模式的信息交换过程

    • 建立连接
    • 发送请求信息
    • 发送响应信息
    • 关闭连接
  • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应

    • 对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接
    • 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应

HTTP1.1运行方式

在这里插入图片描述

  • 在一个TCP连接上可以传送多个HTTP请求和响应
  • 多个请求和响应过程可以重叠
  • 增加了更多的请求头和响应头,比如Host、If-Unmodified-Since请求头等

HTTP/2.0 与HTTP/1.1 的区别

  • HTTP2:标准于 2015年5月发布,以RFC 7540正式发布

区别:

  • 1、HTTP/2.0 采用二进制格式,而非文本格式
  • 2、HTTP/2.0是完全的多路复用,非有序并阻塞的,只需要一个链接即可实现并行
  • 3、使用报头压缩,HTTP/2降低了开销
  • HTTP/2让服务器可以将响应主动 "推送"到客户缓存中

HTTP/2为什么是二进制

  • 比起文本协议,二进制协议解析起来更加高效,"线上"更紧凑哦,更重要的是错误更少

HTTP/2多路传输

  • HTTP/1.X的问题
    • HTTP/1.X 有一个叫 线端阻塞 问题,一个连接一次只能提交一个请求的效率比较高,多了就会变慢
    • HTTP/1.X 试过使用 流水线来解决问题,但效果不理想。
    • 由于网络媒介和服务器不能很好的支持流水线,导致部署比较困难
  • HTTP/2.X的多路复用
    • 可以很好的解决上面的问题,因为它可以同时处理多个消息的请求和响应

消息头为什么需要压缩

  • 节省开销,减少延迟

服务器推送的好处

  • 服务器推送服务,可以推送到缓存中,避免往返的延迟

HTTP名词解释

  • HTML:超文本标记语言
  • URI:统一资源标识符
    • 用于定义全局范围内(包括但不仅限于互联网)去标记唯一的、定位一种资源访问路径的方式,或者命名方式,被称作统一资源标识符
    • URI是告诉了我们一个资源的地址,但是没有告诉我们怎么去那里获取它(访问机制没提供,例如:http、ftp)
    • 例子:http://bitpoetry.io/posts/hello.html#intro
      • http:// 定义如何访问资源的方式
      • bitpoetry.io/posts/hello.html 资源存放的位置
      • #intro 资源
  • URL:统一资源定位符
    • 是URI的一个子集,告诉我们访问网络位置的方式
    • URL则告诉了我们怎么去获取我们想要的资源,提供了访问机制(http://bitpoetry.io/posts/hello.html
  • URN:
    • URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式
    • bitpoetry.io/posts/hello.html#intro
  • MIME:用途互联网邮件扩展
    • MIME可以将非文本数据在传输前重新编码为文本格式再传输给对方,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
  • URI = URL + URN

HTTP 与端口

  • HTTP WEB服务器默认在本机会监听80端口,不仅HTTP会开启监听端口,其实每个软件程序在Linux系统中运行,会以进程的方式启动,程序就会启动并监听本地接口的端口
  • 为什么会引入端口这个概念呢?
    • 端口是TCP/IP协议中应用层进程与传输层协议实体间的通信接口,端口是操作系统可分配的一种资源,应用程序通过系统调用与某个端口绑定后,传输层传给该端口的数据会被该进程接收,相应进程发给传输层的数据都通过该端口输出。
    • 在网络通信过程中,需要唯一识别通信两端设备的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过PID进程号进行识别,而PID进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前没有明确的进程号,如果需要运行后再广播进程号则很难保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用某些公共服务,例如如HTTP默认使用80端口,而FTP使用21、20端口,MYSQL则使用3306端口
    • 使用端口还有一个原因是随着计算机网络技术的发展,物理机器上的硬件接口已不能满足网络通信的要求,而TCP/IP协议模型作为网络通信的标准就解决了这个通信难题。
    • TCP/IP协议中引入了一种被称为套接字(Socket)的应用程序接口。基于Socket接口技术,一台计算机就可以与任何一台具有Socket接口的计算机进行通信,而监听的端口在服务器端也称之为Socket接口。

HTTP协议报文

  • 请求报文语法

    <method> <request-URL> <version>
    <headers><entity-body>
    
  • 响应报文语法

    <version> <status> <reason-phrass>
    <headers><entity-body>
    

请求方法,标明客户端希望服务器对资源执行的动作

  • GET方法,向特定的资源发出请求,获取服务器端数据

  • POST方法,向WEB服务器提交数据进行处理请求,常指提交新数据

  • PUT方法,向WEB服务器提交上传最新内容,常指更新数据

  • DELETE方法,请求删除Request-URL所标识的服务器资源;

  • TRACE方法,回显服务器收到的请求,主要用于测试或诊断;

  • CONNECT方法,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器;

  • OPTIONS方法,返回服务器针对特定资源所支持的HTTP请求方法;

  • HEAD方法,HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息

HTTP 状态码

HTTP状态码(HTTP Status Code)是用来表示WEB[服务器](http://baike.baidu.com/item/服务器)HTTP Response状态的3位数字代码,常见的状态码范围分类:

100-199				用于指定客户端应相应的某些动作;
200-299				用于表示请求成功;
300-399				已移动的文件且被包含在定位头信息中指定新的地址信息;
400-499				用于指出客户端的错误;
500-599				用于支持服务器错误。
  • HTTP协议Response常用状态码详解
 100		Continue				HTTP/1.1新增状态码,表示继续,客户端继续请求HTTP服务器;101		Switching Protocols		服务器根据客户端的请求切换协议,切换到HTTP的新版本协议;200		OK	HTTP				请求完成,常用于GET、POST请求中;301		Moved Permanently		永久移动,请求的资源已被永久的移动到新URI;302		Found					临时移动,资源临时被移动,客户端应继续使用原有URI;304		Not Modified			文件未修改,请求的资源未修改服务器返回此状态码时,常用于缓存;400		Bad Request				客户端请求的语法错误,服务器无法解析或者访问;401		Unauthorized			请求要求用户的身份认证;402		Payment Required		此状态码保留,为以后使用;403		Forbidden				服务器理解请求客户端的请求,但是拒绝执行此请求;404		Not Found				服务器没有该资源,请求的文件找不到;405		Method Not Allowed		客户端请求中的方法被禁止;406		Not Acceptable			服务器无法根据客户端请求的内容特性完成请求;499		Client has closed connection服务器端处理的时间过长;500		Internal Server Error	服务器内部错误,无法完成请求;502		Bad Gateway			    服务器返回错误代码或者代理服务器错误的网关;503		Service Unavailable		服务器无法响应客户端请求,或者后端服务器异常;504		Gateway Time-out		网关超时或者代理服务器超时;505		HTTP Version not supported	服务器不支持请求的HTTP协议的版本,无法完成处理。

HTTPS

  • https其实就是将ssl或tls应用于http协议的结果,https监听于tcp/443端口
  • ssl会话的简化过程如下:
    • 客户端发送可供选择的加密方式,并向服务器请求证书
    • 服务器端发送证书以及选定的加密方式给客户端
    • 客户端取得证书并进行证书验证

总结

  • WEB服务器的主要操作:
    建立连接——接受或拒绝客户端连接请求;接收请求——通过网络读取HTTP请求报文;处理请求——解析请求报文并做出相应的动作;访问资源——访问请求报文中相应的资源;构建响应——使用正确的首部生成HTTP响应报文;发送响应——向客户端发送生成的响应报文;记录日志——当已经完成的HTTP事务记录进日志文件
  • 常用的http压力测试工具:
    ab:语法:ab [options] URL-n:总的请求数-c:模拟的并发数-k:以持久连接模式测试webbenchhttp_loadjmeterloadrunnertcpcopy

http://chatgpt.dhexx.cn/article/vCVm64n0.shtml

相关文章

@http工作原理及使用

文章目录 Http协议介绍Http工作原理访问网站分析Http请求方法Http响应方法http相关术语 Http协议介绍 &#xfffc; HTTP 全称&#xff1a;Hyper Text Transfer Protocol 中文名&#xff1a;超文本传输协议------包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些…

深入浅出HTTPS工作原理

深入浅出HTTPS工作原理 看了这么多篇讲https和加密算法的文章&#xff0c;只有阮一峰老师和这位老师的总结比较好。特此转载。 本文经授权转自腾讯蓝鲸&#xff08;微信号&#xff1a;Tencent_lanjing&#xff09; 蔡卓伦 14年毕业后加入腾讯sng增值产品部&#xff0c;一直从事…

HTTP详解 1 -工作原理

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 1. HTTP简介 HTTP协议&#xff08;HyperTe…

关于HTTP的工作原理

对于http&#xff0c;相信只要是个码农就都不会很陌生&#xff0c;但是如果有人问你&#xff0c;你对http了解吗&#xff1f;或者问当我们在浏览器的地址栏中输入一个网址如“http://www.baidu.com”之后发生了什么&#xff0c;为什么会出现【百度一下&#xff0c;你就知道】这…

HTTP协议的工作原理

一、HTTP协议用于客户端和服务端之间的通信 1、http协议规定&#xff0c;请求是从客户端发出&#xff0c;最后服务器端相响应请求并返回 2、请求报文是由请求方法&#xff0c;请求URI&#xff0c;协议版本&#xff0c;可选的请求首部字段和内容实体构成。 3、响应报文基本上由…

HTTP和HTTPS的工作原理及区别

一、HTTP和HTTPS的基本概念 HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;&#xff1a;是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff08;TCP&#xff09;&#xff0c;用于从Web服…

HTTP详解(1)-工作原理

1. HTTP简介 HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效&#xff0c;使网络传输减少。它不仅保证计算机正确快速地传输超文本文档&#xff0c;还确定…

VBS带你领略脚本语言的快乐!(入门篇)

VBS语言基础入门 前言 小弟初来乍到&#xff0c;自诩高中时曾自学过一点VBS脚本语言基础&#xff0c;感觉不错&#xff0c;想把学习到的东西记录下来&#xff0c;和大家分享一下&#xff0c;由于小弟我学艺不精&#xff0c;有误的地方还请多多指教。    入门篇是给电脑小白做…

◎Vbs脚本编程简明教程之十 —— Vbs脚本编程常用的编辑器

Vbs脚本常用的编辑器当然是notapad&#xff0c;不过这个编辑器的功能当然实在是太弱了一点&#xff0c;其实有很多的专用的脚本编辑器可以大大方便vbs脚本的编写。我常用的有两种&#xff1a; 1、VBSEDit汉化版 2、primalscript汉化版&#xff0c;可以对30多种脚本进行编辑

VBS基础语法讲解

VBS基础语法讲解 文章目录 VBS基础语法讲解引言 一、编辑VBS的相关软件二、变量的定义一点说明 三、输入与输出1、输入2、输出 四、判断语句五、循环语句1、do -- loop 循环1&#xff09;until2&#xff09;while3&#xff09;exit do 2、for -- next 循环 引言 最近在学习VBS…

bat编程和vbs编程入门

先看看bat&#xff08;批处理文件&#xff09;中一些简单的命令 开头第一句 echo off 这句话的意思是后面每句都关闭回显&#xff0c;&#xff08;你可以不加这句直接echo 几行试试&#xff09;on打开命令的回显状态&#xff1b;off关闭命令的回显状态。关于“回显”&#xff…

vbs编程-执行cmd命令

简单格式 set ws createobject("wscript.shell") ws.run "cmd.exe /c explorer e:\game" cmd命令行参数 cmd /c > /close 执行命令,关闭窗口 cmd /k > /keep 执行命令,保持窗口 详细如下: 命令行输入 cmd /?

vbs编程入门

由于本经验是针对初次学习VBScript的小伙伴而定制的一篇经验&#xff0c;看完本经验。小编的目的是希望小伙伴能学会2点&#xff1a; 1、VBScript的解释器在哪 2、VBScript为什么能直接解释运行 3、第一个VBS函数——msgbox 先来说下什么是解释器&#xff1a;编程编程&#xff…

vbs格式编程教程提高

大家好&#xff0c;今天我又双叒叕来写教程了&#xff0c;相信很多读者是从我的文章&#xff1a;vbs格式编程教程_Hacker_02的博客-CSDN博客里过来的吧&#xff1f;好了&#xff0c;闲话先说到这&#xff0c;我们开始今天的提高内容&#xff1a; 下有小病毒&#xff0c;想要的…

vbs格式编程教程基础

什么是vbs呢&#xff1f;我们来看一下百度百科上的定义。 VBS是基于Visual Basic的脚本语言。VBS的全称是&#xff1a;Microsoft Visual Basic Script Edition。&#xff08;微软公司可视化BASIC脚本版&#xff09;。 大家最关心的就是用什么工具来开发VBS程序了, 答案是:记事…

Latex部分斜体变直体

Latex斜体变为直体 \rm即可 未使用之前的效果&#xff08; ${x}_{n1}$ $\mathop{\arg\min}\limits_{x}\alpha(x;D_n) &#xff09; 为了将所有的小写x变为直体&#xff0c;将所有的x替换为{\rm x}。&#xff08; ${\rm x}_{n1}$ $\mathop{\arg\min}\limits_{\rm x}\alph…

latex \textit不变斜体

latex 字体问题 使用平台&#xff1a;texstudio 问题描述&#xff1a;使用\textit \textbf等字体命令并不变成斜体和加粗&#xff0c;但并不报错 解决方法&#xff1a;将编译器XeLaTex改为PdfLaTex&#xff0c;latex小白表示也不知道为什么&#xff0c;但确实好使了。

Latex 字体调整-斜体-下划线-加粗-罗马数字

字体大小&#xff1a; 七号   5.25pt    1.845mm    \tiny 六号   7.875pt    2.768mm    \scriptsize 小五号  9pt      3.163mm    \footnotesize 五号   10.5pt    3.69mm     \small 小四号  12pt     4.2175mm    \norma…

latex的公式中不用斜体显示,使用罗马字体显示

latex的公式中不用斜体显示&#xff0c;使用罗马字体显示 latex公式中部分字体不是用斜体显示改成不是斜体的字母 latex公式中部分字体不是用斜体显示 latex的公式中显示min的格式是如下图所示&#xff1a; 对应的latex的代码如下所示&#xff1a; \begin{align}\label{test…

Latex参考文献斜体变正体方法

测试环境&#xff1a;texlivetexstudio 最近发表的论文被拒稿后改投Elsevier出版社的期刊&#xff0c;在引用参考文献时&#xff0c;遇到了问题&#xff1a; 1.一开始样式用的期刊所给名为&#xff08;cas-model2-names.bst&#xff09;的参考文献格式文件&#xff0c;但是使…