HTTP协议原理详解

简介: HTTP协议原理详解

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运行方式


image.png


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


建立连接


发送请求信息


发送响应信息


关闭连接


  • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应


对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接


浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应


HTTP1.1运行方式


image.png


  • 在一个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:以持久连接模式测试
    webbench
    http_load
    jmeter
    loadrunner
    tcpcopy


相关文章
|
4天前
|
人工智能 网络协议 Linux
MCP 协议:为什么 Streamable HTTP 是最佳选择?
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
|
6天前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
|
2月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
12天前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
55 16
|
4天前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
30 3
|
6天前
|
XML 网络协议 程序员
Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南
Apipost是一款强大的接口调试工具,支持多种主流API协议。它涵盖HTTP/HTTPS、WebSocket、Socket.IO、gRPC、GraphQL、TCP及ISO8583金融报文等冷门协议。通过Body多样化、全局参数配置、性能分析等功能优化HTTP调试;提供WebSocket多消息存档与事件监听;gRPC支持服务反射和流式调试;GraphQL可自动生成Schema;TCP报文模板专业精准;SSE配置简单。此外,Apipost还具备环境变量、脚本加持和文档生成功能,是提升开发效率的全能工具。
|
27天前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
64 22
|
25天前
|
存储 API
如何克服HTTP协议的无状态问题
总的来说,如何克服HTTP协议的无状态性,就是通过某种方式,让服务器或客户端“记住”一些信息。这其中,Cookie和Session是最经常使用的两种方式,其他的根据具体的应用场景来选择。
55 10
|
22天前
|
人工智能 网络协议 API
开发效率翻倍!Apipost这些协议调试秘籍,从HTTP到金融报文全搞定
Apipost是一款强大的API研发管理工具,支持多种协议与数据格式,包括HTTP(s)、WebSocket、SSE、gRPC、TCP及金融协议(如ISO 8583、FIX)。它内置国密算法库,提供HTTP文件秒传、全局参数配置等实用功能。在SSE调试中,可轻松处理AI模型流式响应;WebSocket与Socket.IO实现高效实时通信;GraphQL支持可视化Query编写;TCP模块解决金融报文编码难题;gRPC则具备服务反射与流式调试能力。Apipost不仅简化了多协议切换的复杂性,还自动生成文档,显著提升开发效率,让开发者专注于核心业务逻辑。
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
HTTP 协议浅析
通过对HTTP协议的深入了解,开发者可以更好地设计和优化Web应用,提高数据传输效率和用户体验。
161 21
下一篇
oss创建bucket