创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜
前言
运维必备——计算机网络,我是一名即将毕业的大学生,超超。计算机网络是计算机行业的入门基础,超说网络是笔者对于计算机网络知识的梳理总结,和超超一起学习计算机网络,搞定网络知识,秋招拿下理想offer!
系列文章
超说网络NO.4 | 深入了解应用层原理(中科大 郑烇)
超说网络NO.3 | 深入了解网络的分层体系结构
超说网络NO.2 | 深入了解计算机网络:网络边缘、网络核心、接入网和物理媒体
概述
超说网络NO.5 | 深入了解应用层Web服务和HTTP、HTTPs协议,以及面试常考题!
目录
前言
系列文章
概述
web和HTTP的一些术语
HTTP:超文本传输协议
HTTP是什么?
HTTP的优缺点
HTTP属于客户/服务器模式
基于TCP连接的HTTP
非持久与持久HTTP
非持久HTTP
持久HTTP
HTTP的版本
HTTP/0.9
HTTP/1.0
HTTP/1.1
HTTP/2.0
HTTP/1.1与HTTP/1.0的区别
HTTP/2有什么不足?
HTTP常见字段
HTTP请求报文
HTTP请求报文
HTTP请求报文通用格式
提交表单的输入:Post方式与URL方式
Post方式
URL方式
HTTP的方法类型
HTTP的响应报文
响应报文格式
状体码
用户-服务器状态:cookies
了解cookies
cookies维护实例
Cookies的用处与维护
Cookies与隐私
Web缓存
web缓存目标
使用Web缓存的优势
缓存的实例
条件GET方法
面试常考题
01.HTTP与HTTPs
02.HTTPS 是如何解决上HTTP的不安全性?
03.数字证书和 CA 机构
04.GET 和 POST 的区别
05.GET 和 POST ⽅法都是安全和幂等的吗?
web和HTTP的一些术语
Web页:由一些对象组成,对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等。Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接),通过URL对每个对象进行引用。
URL格式:访问协议,用户名,口令字,端口等。
HTTP:超文本传输协议
HTTP是什么?
HTTP: HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol。是一个基于请求与响应,无状态的,Web服务的应用层的协议,常基于TCP传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。
HTTP超⽂本协议传输,它可以拆成三个部分:超文本、传输、协议。
协议:HTTP 是⼀个⽤在计算机世界⾥的协议。它使⽤计算机能够理解的语⾔确⽴了⼀种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理⽅式(⾏为约定和规范)。
传输:就是把⼀堆东⻄从 A 点搬到 B 点,或者从 B 点 搬到 A 点。别轻视了这个简单的动作,它⾄少包含两项重要的信息。HTTP 协议是⼀个双向协议。
超文本:HTTP传输的内容是超⽂本,它就是超越了普通⽂本的⽂本,它是⽂字、图⽚、视频等的混合体,最关键有超链接,能从⼀个超⽂本跳转到另外⼀个超⽂本。
HTTP的优缺点
HTTP优点
HTTP的主要优点是简单、灵活、易于拓展、应该广泛以及跨平台。
1. 简单
HTTP 基本的报文格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式。
2. 灵活和易于扩展
HTTP协议⾥的各类请求⽅法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发⼈员⾃定义和扩充。同时 HTTP 由于是⼯作在应⽤层( OSI 第七层),则它下层可以随意变化。
HTTPS 也就是在 HTTP所在的应用层与TCP所在的传输层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚⾄把 TCP 层换成了基于 UDP 的QUIC。
3. 应用⼴泛和跨平台
互联⽹发展⾄今,HTTP 的应⽤范围⾮常的⼴泛,HTTP 的应⽤遍地开花,同时天然具有跨平台的优越性。
HTTP缺点
由于HTTP是无状态、明文传输的因此数据不安全。
无状态的优缺点
⽆状态的好处,因为服务器不会去记忆 HTTP 的状态,因此不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。
⽆状态的坏处,既然服务器没有记忆能⼒,它在完成有关联性的操作时会⾮常麻烦
HTTP 的安全问题,可以用HTTPS 的方式解决,也就是通过引⼊ SSL/TLS 层,使得在安全上达到了极致。
HTTP属于客户/服务器模式
客户: 请求、接收和显示Web对象的浏览器;
服务器: 对请求进行响应,发送对象的Web服务器。
基于TCP连接的HTTP
1.客户发起一个与服务器的 TCP连接 (建立套接字) , 端口号为 80
2.服务器接受客户的TCP连接
3.在浏览器(HTTP客户端) 与 Web服务器(HTTP服 务器 server)交换HTTP报文 (应用层协议报文)
4.TCP连接关闭
HTTP是无状态的,即服务器并不维护关于客户的任何信息。
维护状态的协议很复杂:
1.必须维护历史信息(状态)
2.如果服务器/客户端死机,它们的状态信息可能不一致, 但二者的信息必须是一致,因此会需要重新连接
3.无状态的服务器能够支持更多的客户端
非持久与持久HTTP
非持久HTTP
非持久HTTP,最多只有一个对象在,TCP连接上发送,下载多个对象需要多个TCP连接。HTTP/1.0使用非持久连接。
非持久链接:
响应时间模型
往返时间RTT(round-trip time):一个小的分组从客户端到服务器,在回到客户端的时间(传输时间忽略)。
响应时间:一个RTT用来发起TCP连接,一个 RTT用来HTTP请求并等待HTTP响应
文件传输时间共:2RTT+传输时间
非持久HTTP的缺点
时间长,每个对象要2个RTT;操作系统必须为每个TCP连接分配资源,但浏览器通常打开并行TCP连接,以获取引用对象。
持久HTTP
持久HTTP,多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输。服务器在发送响应后,仍保持TCP连接。在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送,客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求。HTTP/1.1 默认使用持久连接。
持久分为流水线和非流水线。
非流水方式的持久HTTP:客户端只能在收到前一个响应后才能发出新的请求,每个引用对象花费一个RTT。
流水方式的持久HTTP:HTTP/1.1的默认模式,客户端遇到一个引用对象就立即产生一个请求,所有引用(小)对象只花费一个RTT是可能的。
HTTP的版本
HTTP/0.9
只接受GET一种请求方法,没有在通信中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
第一个在通信中指定的版本号,至今被广泛采用,特别是在代理服务器中。
HTTP/1.1
当前版本号,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
但是HTTP/1.1仍有性能瓶颈,如
请求 / 响应头部(Header)未经压缩就发送,⾸部信息越多延迟越⼤。只能压缩 Body 的部分;
发送冗⻓的⾸部。每次互相发送相同的⾸部造成的浪费较多;
没有请求优先级控制,服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端⼀直请求不到数据,也就是队头阻塞;
HTTP/2.0
HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。
HTTP/2的改进:
1.头部压缩
HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是⼀样的或是相似的,那么,协议会帮你消除重复的部分。 这就是所谓的 HPACK 算法:在客户端和服务器同时维护⼀张头信息表,所有字段都会存⼊这个表,⽣成⼀个索引号,以后就不发送同样字段了,只发送索引号,这样就提⾼速度了。
2.⼆进制格式
HTTP/2 不再像 HTTP/1.1 ⾥的纯⽂本形式的报⽂,⽽是全⾯采⽤了⼆进制格式,头信息和数据体都是⼆进制,并且统称为帧(frame):头信息帧和数据帧。
3.数据流
HTTP/2 的数据包不是按顺序发送的,同⼀个连接⾥⾯连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。每个请求或回应的所有数据包,称为⼀个数据流( Stream )。每个数据流都标记着⼀个独⼀⽆⼆的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数。
客户端还可以指定数据流的优先级。优先级⾼的请求,服务器就先响应该请求。
4.多路复⽤
HTTP/2 是可以在⼀个连接中并发多个请求或回应,⽽不⽤按照顺序⼀⼀对应。移除了 HTTP/1.1 中的串⾏请求,不需要排队等待,也就不会再出现队头阻塞问题,降低了延迟,⼤幅度提⾼了连接的利⽤率。
5. 服务器推送
HTTP/2 还在⼀定程度上改善了传统的「请求 - 应答」⼯作模式,服务不再是被动地响应,也可以主动向客户端发送消息。
HTTP/1.1与HTTP/1.0的区别
1.persistent connection(持久连接)
HTTP/1.0:每对请求/ 响应都需要建立新的TCP连接。
HTTP/1.1:支持持久连接(默认),持久连接的特点是,只要任意⼀端没有明确提出断开连接,则保持 TCP 连接状态。
2.Host域
HTTP/1.1在请求消息头多一个Host域;HTTP/1.0 则没有这个域,建立TCP连接的时候已经指定了IP地址,而且默认一个IP地址只对应一个主机名,IP地址上只有一个host。
3.请求方法和状态码
HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法。
HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。
在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
4.内容协商
为了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。
HTTP/1.0定义了内容协商 (content negotiation)的概念,也就是说客户端可以告诉服务器自己可以接收以何种语言(或字符集)表示的资源。例如如果服务器不能明确 客户端需要何种类型的资源,会返回300(Multiple Choices),并包含一个列表,用来声明该资源的不同可用版本,然后客户端在请求消息中包含Accept-Language和Accept- Charset头域指定需要的版本。
5.带宽优化
HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。请求消息中如果包含比较大的实体内容,但不确定服务器是否能够接收该请求(如是否有权限),此时若贸然发出带实体的请求,如果被拒绝也会浪费带宽。 HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码 401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。注意,HTTP/1.0的客户 端不支持100响应码。
节省带宽资源的一个非常有效的做法就是压缩要传送的数据。Content-Encoding是对消息进行端到端(end-to-end)的编码,它可能是 资源在服务器上保存的固有格式(如jpeg图片格式);在请求消息中加入Accept-Encoding头域,它可以告诉服务器客户端能够解码的编码方 式。而Transfer-Encoding是逐段式(hop-by-hop)的编码,如Chunked编码。在请求消息中加入TE头 域用来告诉服务器能够接收的transfer-coding方式。
HTTP/2有什么不足?
HTTP/2 主要的问题在于,多个 HTTP 请求在复⽤⼀个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以⼀旦发⽣了丢包现象,就会触发 TCP 的重传机制,这样在⼀个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。
HTTP/1.1 中的管道( pipeline)传输中如果有⼀个请求阻塞了,那么队列后请求也统统被阻塞住了。
HTTP/2 多个请求复⽤⼀个TCP连接,⼀旦发⽣丢包,就会阻塞住所有的 HTTP 请求。
这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP。
HTTP常见字段
Host字段:客户端发送请求时,⽤来指定服务器的域。
Connection:最常⽤于客户端要求服务器使用TCP 持久连接,以便其他请求复⽤。
Content-Length:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
Content-Type:字段⽤于服务器回应时,告诉客户端本次的数据格式。
Content-Encoding :说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式。
HTTP请求报文
HTTP报文有两种类型:请求、响应。
HTTP请求报文
第一种:ASCII (人能阅读)
由请求行(GET、POST、HEAD命名组成)、首部行和换行回车符(表示报文结束)组成。
HTTP请求报文通用格式
HTTP请求报文格式由命令行(method,sp,url,version空格等)、若干首部行名称和冒号后的首部的值(header lines)、一个回车以及有可能有的实体名称(POST命令需提交表单有实体名称,GET形式)
提交表单的输入:Post方式与URL方式
Post方式
网页通常包括表单输入,包含在实体主体 (entity body )中的,输入被提交到服务器。
URL方式
URL方式:输入通过请求行的URL字段上载
方法:GET
HTTP的方法类型
HTTP/1.0
GET
POST
HEAD:要求服务器在响应报文中 不包含请求对象
HTTP/1.1
GET, POST, HEAD
PUT:将实体主体中的文件上载 到URL字段规定的路径
DELETE:删除URL字段规定的文件
HTTP的响应报文
响应报文格式
HTTP的响应报文由状态行(协议版本、状态码和相应状态信息)、首部行和数据(如请求的HTML文件)组成。
状体码
状体码:位于服务器à客户端的响应报文中的首行。工作中可以利用抓包查看状态码,检测错误类型。
一些常见状态码的例子:
2XX(3种)
200 OK:请求成功,请求对象包含在响应报文的后续部分
204 No Content:表示客户端发送给服务器的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容
3XX(5种)
301 Moved Permanently:请求的对象已经被永久转移了;即新的URL在响应报文的Location(首部行中指定),客户端软件自动用新的URL去获取对象
302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL
301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源
302与303的区别:后者明确表示客户端应当采用GET方式获取资源
304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码
307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况)
4XX(3种)
400 Bad Request:一个通用的差错代码,表示该请求不能被服务器解读
401 Unauthorized:未经许可,需要通过HTTP认证;
403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
404 Not Found:请求的文档在该服务上没有找到
5XX(4种)
500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
501 Not Implemented:表示客户端请求的功能还不⽀持
503 Service Unavailable:表示服务器当前很忙,暂时无法响应服务器
505 HTTP Version Not Supported:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求
此外还有:
499 client has closed connection:这很有可能是因为服务器端处理的时间过长,客户端主动断开了连接
用户-服务器状态:cookies
了解cookies
HTTP是一种无状态的协议,但是服务器需要维护客户端的状态,因此大多数主要的门户网站使用cookies来改善。
cookies由四个4个组成部分:
1.在HTTP响应报文中有一个cookie的首部行
2.在HTTP请求报文含有一个cookie的首部行
3.在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4.在Web站点有一个后端数据库
cookies维护实例
chaochao总是用同一个PC使 用Internet Explore上网,他第一次访问了一个使用了Cookie的电子商务网站,当最初的HTTP请求到达服务器时,该Web站点产生一个唯一的ID,并以此作为索引在它的后端数据库中产生一个项,那么以后的访问就能产生特定的动作。
Cookies的用处与维护
cookies可以用来:用户验证、购物车、推荐、用户状态 (Web e-mail)等
cookies如何维持状态
协议端节点:在多个事务上,发送端和接收端维持状态
cookies: http报文携带状态信息
Cookies与隐私
Cookies允许站点知道许多关于用户的信息,可能将它知道的东西卖给第三方,使用重定向和cookie的搜索引擎还能知道用户更多的信息,如通过某个用户在大量站点上的行为,了解其个人浏览方式的大致模式,广告公司从站点获得信息。
Web缓存
web缓存目标
Web缓存的目标:不访问原始服务器,就满足客户的请求。
①用户设置浏览器:通过缓存访问Web
②将Web浏览器设置为服务代理,浏览器将所有的HTTP请求发给缓存
在缓存中的对象:缓存直接返回对象,如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端。
缓存既是客户端又是服务器,通常缓存是由ISP安装 (大学、公司、居民区ISP)。
使用Web缓存的优势
1.降低客户端的请求响应时间
2.可以大大减少一个机构内部网络与Internent接入链路上的流量,减少了服务器和网络的负担
3.互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容
缓存的实例
条件GET方法
目标:如果缓存器中的对象拷贝是最新的,就不要发送对象
缓存器: 在HTTP请求中指定缓存拷贝的日期
If-modified-since:
<date>
服务器: 如果缓存拷贝陈旧,则响应报文没包含对象
HTTP/1.0 304 Not
Modified
(本文的图片来自与中科大 郑烇老师课件)
面试常考题
01.HTTP与HTTPs
什么是HTTP
HTTP(HyperText Transfer Protocol):超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。
什么是 HTTPS?
HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。
你也可以说:HTTPS = HTTP + SSL,HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
主要区别:
①http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议,HTTPS 在 TCP 三次握⼿之 后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输;
②HTTPS需要得到CA申请证书,一般免费证书较少,因而需要一定费用;
③HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
④HTTP的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的连接方式;
⑤HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的
02.HTTPS 是如何解决上HTTP的不安全性?
①HTTPS 采⽤的是对称加密和非对称加密结合的混合加密方式;
②基于摘要算法的方式来实现完整性,它能够为数据⽣成独一无二的密文,密文用于校验数据的完整性,解决了篡改的风险。
③将服务器公钥放⼊到数字证书中,解决了冒充的风险
03.数字证书和 CA 机构
⼀个数字证书通常包含了:公钥;持有者信息;证书认证机构(CA)的信息;CA 对这份⽂件的数字签名及使⽤的算法;证书有效期;还有⼀些其他额外信息;
那数字证书的作⽤,是⽤来认证公钥持有者的身份,以防⽌第三⽅进⾏冒充。
我们用证书来认证公钥持有者的身份(服务端的身份),那证书⼜是怎么来的?⼜该怎么认证证书呢?
为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA就是⽹络世界⾥的公安局、公证中⼼,具有极⾼的可信度,所以由它来给各个公钥签名,信任的⼀⽅签发的证书,那必然证书也是被信任的。
之所以要签名,是因为签名的作⽤可以避免中间⼈在获取证书时对证书内容的篡改。
如下图图所示,为数字证书签发和验证流程:
CA 签发证书的过程,如上图左边部分:
1.⾸先 CA会把持有者的公钥、⽤途、颁发者、有效时间等信息打包,然后对这些信息进⾏ Hash 计算,得到⼀个 Hash 值;
2.然后 CA 会使用自己的私钥将该 Hash 值加密,⽣成 Certificate Signature,也就是 CA 对证书做了签名;
3.最后将 Certificate Signature 添加在⽂件证书上,形成数字证书;
客户端校验服务端的数字证书的过程,如上图右边部分:
1.⾸先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
2.通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后使用CA 的公钥解密 CertificateSignature 内容,得到⼀个 Hash 值 H2 ;
3.最后⽐较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。
04.GET 和 POST 的区别
Get方法:Get⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。
POST方法:POST方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body ⾥。
05.GET 和 POST ⽅法都是安全和幂等的吗?
先说明下安全和幂等的概念: 在 HTTP 协议⾥,所谓的安全是指请求方法不会破坏服务器上的资源。 所谓的幂等,意思是多次执行相同的操作,结果都是相同的。
因此,GET ⽅法就是安全且幂等的,因为它是只读操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。 POST因为是新增或提交数据的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。
(面试题详解参考小林coding博主)
创作不易,客官点个赞,评论一下吧!超超和你一起加油❤😜