-
第一个在通讯中指定版本号的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
HTTP1.0运行方式
-
基于HTTP协议的客户/服务器模式的信息交换过程
-
建立连接
-
发送请求信息
-
发送响应信息
-
关闭连接
-
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应
-
对每一个页面的访问,浏览器与WEB服务器
都要建立一次单独的连接
-
浏览器到WEB服务器之间的所有通讯都是
完全独立分开的请求和响应
HTTP1.1运行方式
-
在一个TCP连接上可以传送多个HTTP请求和响应
-
多个请求和响应过程可以重叠
-
增加了更多的请求头和响应头
,比如Host、If-Unmodified-Since请求头等
- 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的多路复用
-
可以很好的解决上面的问题,因为它可以同时处理多个消息的请求和响应
消息头为什么需要压缩
- 节省开销,减少延迟
服务器推送的好处
- 服务器推送服务,可以推送到缓存中,避免往返的延迟
-
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 WEB服务器默认在本机会监听80端口,不仅HTTP会开启监听端口
,其实每个软件程序在Linux系统中运行,会以进程的方式启动,程序就会启动并监听本地接口的端口 -
为什么会引入端口这个概念呢?
-
端口是TCP/IP协议中应用层进程与传输层协议实体间的通信接口,端口是操作系统可分配的一种资源,应用程序通过系统调用与某个端口绑定后,传输层传给该端口的数据会被该进程接收,相应进程发给传输层的数据都通过该端口输出。
-
在网络通信过程中,需要唯一识别通信两端设备的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过PID进程号进行识别,而PID进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前没有明确的进程号,如果需要运行后再广播进程号则很难保证通信的顺利进行。而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用某些公共服务,例如如
HTTP默认使用80端口,而FTP使用21、20端口,MYSQL则使用3306端口
。 -
使用端口还有一个原因是随着计算机网络技术的发展,物理机器上的硬件接口已不能满足网络通信的要求,而TCP/IP协议模型作为网络通信的标准就解决了这个通信难题。
-
TCP/IP协议中引入了一种被称为
套接字(Socket)
的应用程序接口。基于Socket接口技术,一台计算机就可以与任何一台具有Socket接口的计算机进行通信,而监听的端口在服务器端也称之为Socket接口。
- 请求报文语法
- 响应报文语法
请求方法,标明客户端希望服务器对资源执行的动作
-
GET方法
,向特定的资源发出请求,获取服务器端数据
; -
POST方法
,向WEB服务器提交数据进行处理请求,常指提交新数据
; -
PUT方法
,向WEB服务器提交上传最新内容,常指更新数据
; -
DELETE方法,请求删除Request-URL所标识的服务器资源;
-
TRACE方法,回显服务器收到的请求,主要用于测试或诊断;
-
CONNECT方法,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器;
-
OPTIONS方法,返回服务器针对特定资源所支持的HTTP请求方法;
-
HEAD方法
,HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息
HTTP状态码(HTTP Status Code)是用来表示WEB[服务器]( )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其实就是将ssl或tls应用于http协议的结果,https监听于tcp/443端口
-
ssl会话的简化过程如下:
-
客户端发送可供选择的加密方式,并向服务器请求证书
-
服务器端发送证书以及选定的加密方式给客户端
-
客户端取得证书并进行证书验证
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
[外链图片转存中…(img-46nAtH58-1713294105298)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!