《图解HTTP》之要点提炼

IP、TCP、DNS协议

负责传输的IP协议

IP协议的作用是把各种数据包传送给对方。其中有两个最重要的条件是IP地址与MAC地址。

IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。ARP是一种解析地址的协议,根据通信方的IP地址可以反查处对应的MAC地址。

下图为路由选择
在这里插入图片描述

确保可靠性的TCP协议

TCP处于传输层,提供可靠的字节流服务。为确保数据能到达目标,TCP协议采用了三次握手策略,同时还有确认应答,重传超时,滑动窗口,流传输(窗口长度),快重传(三次重传),慢启动,拥塞窗口(慢启动阈值),普通恢复与快恢复,延迟应答,捎带应答等多种机制来保证流量防止拥塞等问题。
在这里插入图片描述

负责域名解析的DNS服务

DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址,但计算机需要IP地址,就由DNS协议提供该服务。
在这里插入图片描述
整个流程中各个协议的作用:
(1)DNS协议将主机/域名(hackr.jp)解析成对应的IP地址;
(2)HTTP协议将生成HTTP请求报文;
(3)TCP协议,将请求报文分割并可靠的传输给对方;
(4)IP协议,搜索对方的地址,一边中转一边传送;
(5)TCP协议:将请求报文重组,并发送回应用层;
(6)HTTP协议对请求的内容进行处理,并由服务器返回请求内容。
在这里插入图片描述
在这里插入图片描述

URI

URI用字符串来标识某处的互联网资源,而URL则是互联网资源的具体地址。
在这里插入图片描述

HTTP协议

HTTP是应用层协议,定义的是传输数据的内容的规范。HTTP的连接使用**“请求-响应”**方式。基于TCP协议传输默认端口号是80

通过请求和响应的交换达成通信

HTTP协议规定,由客户端发出请求,由服务端返回响应。
在这里插入图片描述

请求报文与响应报文

HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。

请求报文是由请求方法请求 URI协议版本、可选的请求首部字段内容实体构成的。
在这里插入图片描述
而响应报文是由协议版本状态吗状态吗的原因短语以及响应首部字段以及实体主体构成的。
在这里插入图片描述
HTTP是一种不保存的协议,HTTP 协议自身不具备保存之前发送过的请求或响应的功能

HTTP协议通过URI定位互联网上的资源。

GET方法与Post方法

get方法:当客户端想要向服务器读取数据时使用GET, 指定的资源经服务器端解析后返回响应内容。get方法的参数通过URL传递,由于服务器对URL长度的限制,允许发送的数据量较小,且由于信息直接暴露在URL中,因此不能传递敏感信息。
在这里插入图片描述
post方法:当客户端给服务器提供信息较多时可以使用POST;POST会附带用户数据,一般用于更新资源信息POST将请求参数封装在HTTP 请求数据中,可以传输大量数据,传参方式比GET更安全。
在这里插入图片描述
在这里插入图片描述

Cooike

Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。当客户端第一次向服务端发送请求报文后,服务端会在响应保文中写入Cookie信息,当客户端第二次向服务端发送请求报文时,该报文中带有Cookie,服务端就可以通过该Cookie找到之前的状态信息。
在这里插入图片描述
在这里插入图片描述

返回结果的HTTP状态吗

状态码用于表示HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误。状态吗的类别如下。
在这里插入图片描述

1XX

1XX表示服务器已接收了客户端请求,客户端可继续发送请求。

2XX成功

2XX代表请求被正常处理了。

  1. 200 OK
    表示从客户端发来的请求在服务器端被正常处理了。
    在这里插入图片描述
  2. 204 No Content
    该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
    一般在只客户端往服务端发送消息,而对客户端不需要发送新消息内容时使用。(理解为post)
    在这里插入图片描述
  3. 206 Partial Content
    该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求
    在这里插入图片描述

3XX

表示服务器要求客户端重定向。

  1. 301 Moved Permanently
    永久性重定向,该状态码表示当前URI所指向的资源已经被分配其他URI,在请求时应该使用新的URI。例如:当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码。
    在这里插入图片描述
  2. 302 Found
    临时性重定向,该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
    在这里插入图片描述
  3. 304 Not Modified
    **该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。**比如没有满足get的条件。
    在这里插入图片描述

4XX客户端错误

4XX 的响应结果表明客户端是发生错误的原因所在,客户端请求的有非法内容

1.400 Bad Request
该状态码表示请求报文中存在语法错误。
在这里插入图片描述
2.401 Unauthorized
该请求码代表发送的请求需要有HTTP认证,同时如果这是第二次发出401,则代表认证没有被通过。同时该请求码必须包含一个适用于被请求资源的 WWW.Authenticate首部用以质询(challenge)用户信息。
在这里插入图片描述
3.403 Forbidden
表示访问资源的请求被服务端禁止了。
在这里插入图片描述
4.404 Not Found
表示服务器无法找到请求的资源
在这里插入图片描述

5XX 服务器端错误

表示服务器未能正常处理客户端的请求而出现意外错误。

1.500 Internal Server Error
表示服务端内部在处理请求时出现了错误
在这里插入图片描述
2.503 Service Unavailable
表示服务器暂时处于超负荷或维护中,当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
在这里插入图片描述

HTTP与HTTPs

在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS 通信机制可以有效地防止这些问题。
HTTP具有以下缺点:
(1)通信使用明文,内容可能会被窃听。
(2)不验证通信方的身份,因此有可能遭遇伪装。
(3)无法证明报文的完整性,所以有可能已遭篡改

HTTPS是披着SSL外壳的HTTP,它在通过HTTP与TCP通信之间先进行了SSL加密,可以说HTTPS就是实现了通信加密身份验证完整性保护的HTTP。
在这里插入图片描述
HTTP的报文使用明文(指未经过加密的报文)方式发送,而SSL会对报文内容进行加密。
在这里插入图片描述HTTP协议中的请求和响应不会对通信方进行确认,会发生服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端的问题。而SSL中通过第三方向发送端与接收端发放的证书来识别身份。
在这里插入图片描述
HTTP协议中常用MD5和SHA-1等散列值校验的方式来确认文字的数字签名以防止内容篡改,但如果篡改者将MD5与SHA-1都改变了的话,就无法判断了。
在这里插入图片描述
除此之外,从端口来看:HTTP常用端口为80,而HTTPS的常用端口为443;

从资源来看:HTTPS由于加密和解密会消耗更多的CPU和资源;

从开销上来看:HTTPS需要证书,需要向机构购买;

Https的加密算法

1.共享密钥算法
解密和加密需要同一把秘钥的算法,在传输过程中需要传递秘钥。
在这里插入图片描述
2.公开秘钥算法
包括两把秘钥:公开秘钥与私有秘钥。发送秘钥的一方使用对方的秘钥对报文进行加密,对方收到后使用自己的私有秘钥解密。
在这里插入图片描述

Https安全通信(建立)的过程

1.客户端会首先向服务端发一个ClientHello,包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
2.服务器会在可以进行SSL服务时,返回一个ServerHello,其中也是包含SSL的指定版本与加密组件
3.服务端会发送一个certificate,包含公开密钥的证书
4.服务端会发送Server Hello Done通知客户端的初始握手完成。
5.SSL第一次握手结束后,客户端会发送一个Client Key Exchange来作为回应。报文中包含一种随机密码串Pre-master secret,该报文已经通过公开秘钥进行加密
6.客户端继续发生ChangeCipherSpec报文提示在此之后的报文都会通过Pre-master secret来加密;
7.客户端发送Finished报文
8.服务端同样返回ChangeCipherSpec
9.服务端返回Finished
10.当客户端与服务端的Finished报文交换后,说明SSL连接成功,之后客户端发送Http请求
11.服务端返回Http响应
12.由客户端断开连接,通过发送close_notify报文。
在这里插入图片描述

在地址栏打入URL会发生什么

1.浏览器首先通过DNS服务器将URL中的主机域名解析成IP地址
2.浏览器(根据IP地址与80端口)向服务器请求建立TCP连接,通过三次握手与服务端建立联系;
3.服务器根据URL中的内容返回对应的html文件;
4.传输结束后,服务器通过四次挥手与客户端断开连接;
5.浏览器将html文件解析并显示出来

DNS查询:
首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器
在这里插入图片描述
浏览器客户端向本地DNS服务器发送一个含有域名www.cnblogs.com的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其www.cnblogs.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地DNS服务器将含有www.cnblogs.com的IP地址的响应报文发送给客户端
在这里插入图片描述
从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。

Http1.0,1.1,2.0的区别

Http1.0默认使用短连接,1.1使用长连接
Http1.1相比1.0多加了一些响应头,如身份认证、状态管理和Cache缓存等。
Http2.0相比Http1.x
新的二进制格式:HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮,不同于HTTP1.x的解析是基于文本
多路复用连接共享,即每一个request都是是用作连接共享机制的
服务端推送服务器主动向客户端推送消息。

HTTP的长连接和短连接本质上是TCP长连接和短连接。
短连接浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接
长连接当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

优缺点:长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。在长连接的应用场景下,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,client端一般不会主动关闭它们之间的连接,Client 与 server 之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候 server 端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致 server 端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章