《图解 HTTP 》阅读笔记(一)

最近在复习http相关知识,阅读了两本相关书籍,《图解 HTTP 》与《HTTP权威指南》。这里记录一下阅读笔记。还是我们之前的老办法,阅读一篇技术文章或者书籍之前,最好带着问题去阅读。这样的话,阅读过程中,不仅知识点可以得到深化记忆,最重要的是阅读过程中会有一定的成就感

1.关于HTTP的一些问题

在这里插入图片描述

不知道大家阅读一本技术相关的书籍之前是否是这样做的,小编发现,如果阅读之前,先去头脑风暴一波,可以发现自己很多的知识盲点或者说是理解不深刻的知识点。

好了,废话不多说,我们开始正文,本文以《图解HTTP》这本书的阅读笔记,来逐一解答这些问题。

2.《图解HTTP》的阅读思维导图

《图解 HTTP 》阅读笔记(一)_第1张图片

3 第一章&第二章知识点

《图解 HTTP 》阅读笔记(一)_第2张图片

3.1 HTTP

HTTP 是一种超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

《图解 HTTP 》阅读笔记(一)_第3张图片

HTTP 主要内容分为三部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)

3.2 DNS/TCP/UDP/IP/ARP

计算机与网络设备要互相通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先约定。不同的硬件、操作系统中间的通信,所有的这一切都需要一种规。而我们就把这种规则称之为协议(Protocol)。

《图解 HTTP 》阅读笔记(一)_第4张图片

协议中存在各式各样的内容,从电缆的规格、IP地址的选定、寻找异地用户的方法、双方建立通信的顺序等等,想这样把与互联网相关联的协议集合起来总称为TCP/IP协议族。当然,您可以从狭义的角度理解为TCP协议和IP协议,但是往往互联网中,更多的说的是前者。

《图解 HTTP 》阅读笔记(一)_第5张图片

**DNS的作用是:**用于域名到IP地址的解析。

**TCP的作用是:**提供处于网络连接中的两台计算机自己的可靠的数据传输。

**UDP的作用是:**提供处于网络连接中的两台计算机自己的非可靠的数据传输。

**IP的作用是:**规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。。

《图解 HTTP 》阅读笔记(一)_第6张图片

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。

IP间的通信依赖MAC地址。因为IP地址是会变的,但是MAC地址不会变,所以这时有了ARP协议,ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。

小知识点:有了IP地址,为什么还要有域名?

计算机里面是数字和二进制更加方便,但是对于用户来说,记忆字母和数字的字符串更加符合人类的记忆习惯,例如,您经常访问的https://www.baidu.com,而不是记忆了它的IP地址。

3.3 TCP三次握手

为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志(flag)——SYN(synchronize)和ACK(acknowledgement)。

《图解 HTTP 》阅读笔记(一)_第7张图片

**三次握手的目的:**通信双方为了确保对方存在,并且都可以正常收发信息

小知识点:为什么不能是两次握手?

一方面我们上面说过,三次握手是为了证明双方收发都是正常的,那么两次只是证明了一端收发正常,另外一方面是为了防止已经失效的连接请求报文突然又传送到了服务器,从而导致不必要的错误和资源的浪费。

3.4 TCP四次挥手

TCP 断开连接是通过四次挥手方式。双方都可以主动断开连接。

《图解 HTTP 》阅读笔记(一)_第8张图片

小知识点

1)为什么需要挥手四次了?

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
  • 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

2)为什么客户端需要等待2MSL?

为了确认服务端收到客户端发送的ack报文,如果客户端在发送ack之后,立马close,那么ack报文如果在传输过程中丢失,那么服务端就会一直FIN报文,从而陷入死循环。

MSL 指的是 Maximum Segment Lifetime:一段 TCP 报文在传输过程中的最大生命周期。那么2MSL就是指来回的最长时间。

3.5 HTTP协议与各协议的关系图解

《图解 HTTP 》阅读笔记(一)_第9张图片

3.6 URL与URI

URL(Uniform Resource Locator,统一资源定位符)

URI(Uniform Resource Identifier,统一资源标识符)

区分这两者的关系,很简单,L有location的意思,我们平常使用的域名地址其实就是URL,例如:https://www.baidu.com,而URI有标识的意思,标识的目标为资源,网络中所有东西其实都是资源,所以平常我们在URL后面跟上资源请求字段,就是URI,例如

    ftp://ftp.is.co.za/rfc/rfc1808.txt
    http://www.ietf.org/rfc/rfc2396.txt
    ldap://[2001:db8::7]/c=GB?objectClass?one
    mailto:John.Doe@example.com
    news:comp.infosystems.www.servers.unix
    tel:+1-816-555-1212
    telnet://192.0.2.16:80/
    urn:oasis:names:specification:docbook:dtd:xml:4.1.2

URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。

URI的格式为:

《图解 HTTP 》阅读笔记(一)_第10张图片

URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。

3.7 Cookie

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。协议对于发送过的请求或响应都不做持久化处理。
《图解 HTTP 》阅读笔记(一)_第11张图片

可是,随着Web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态。虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
《图解 HTTP 》阅读笔记(一)_第12张图片

当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
《图解 HTTP 》阅读笔记(一)_第13张图片

3.8 Session

Session(会话)是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

《图解 HTTP 》阅读笔记(一)_第14张图片

3.9 GET/POST/HEAD/OPTIONS

GET方法获取资源,POST方法传输实体主体。虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。
《图解 HTTP 》阅读笔记(一)_第15张图片

OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
HEAD方法和GET方法一样,只是不返回报文主体部分,只要求返回报文首部。

小知识点:GET与POST的区别
1)url可见性:get参数可见,post参数不可见
2)数据传输上:get是拼接的参数,post是body传输的
3)缓存:get可以缓存、post不可缓存
4)传输数据的大小:get一般很小,post理论上可以无限
5)get理论上必post更快,get为一次,post为两次

3.10 持久化与管线化

HTTP1.0每次请求,都需要TCP连接的建立与断开,数据通信效率降低,而且带来了客户端和服务端的额外开销。为了解决以上问题,HTTP 1.1提出了持久连接,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久化的基础上,客户端与服务端依然是一次请求、一次响应,必须按序进行,而不能并发多次请求,充分利用cpu资源,所以提出了管线化,这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

《图解 HTTP 》阅读笔记(一)_第16张图片

4.小结

篇幅所限,本来打算一篇笔记写完的,但是发现篇幅太长,暂时做个小结,后续请看阅读笔记二。
到目前为止,我们对《图解HTTP》的第一章和第二章进行了学习总结。
《图解 HTTP 》阅读笔记(一)_第17张图片

你可能感兴趣的:(Java,web,http,网络,tcp/ip)