HTTP协议原理详解,重磅

  • 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 与端口


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-TZ6U8GUe-1711691507761)]

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-JRplirYg-1711691507761)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值