HTTPHTTP_0">《图解HTTP》——学习HTTP
看过很多的关于http的博客,但还是有些模糊,偶尔看到《图解HTTP》这本书,终于有了清晰的认识,PS:文末附电子书下载链接
——以下内容来自于对书中的梳理和总结——
一、网络基础TCP/IP
TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称。
协议——不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。
TCP/IP 协议族按层次分别分为以下 4 层:
应用层、传输层、网络层和数据链路层。
TCP/IP 协议族各层的作用如下。
1、应用层
应用层决定了向用户提供应用服务时通信的活动。TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File TransferProtocol,文件传输协议)和 DNS(Domain Name System,域名系统)服务就是其中两类。HTTP 协议也处于该层。
2、传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。
3、网络层(又名网络互连层)
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起
的作用就是在众多的选项内选择一条传输路线。
4、链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。发送端与接收端之间每次都会经过添加首部和消去首部的过程
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(threeway handshaking)策略。用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement)。
IP(Internet Protocol)网际协议位于网络层。Internet Protocol这个名称可能听起来有点夸张,但事实正是如此,因为几乎所有使用网络的系统都会用到 IP 协议。TCP/IP 协议族中的 IP 指的就是网际协议,协议名称中占据了一半位置,其重要性可见一斑。可能有人会把“IP”和“IP 地址”搞混,“IP”其实是一种协议的名称。
——IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。
——IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改.
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
用一张图,将所有相关协议和http协议联系起来
HTTP_48">二、HTTP协议
HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。
接收到请求的服务器,会将请求内容的处理结果以响应的形式返回。
HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。由此Cookie就出现了Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。
下图是请求报文和响应报文
——请求行
包含用于请求的方法,请求 URI 和 HTTP 版本。
——状态行
包含表明响应结果的状态码,原因短语和 HTTP 版本。
——首部字段
包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
—1>通用首部字段(General Header Fields)请求报文和响应报文两方都会使用的首部。
—2>请求首部字段(Request Header Fields)从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
—3>响应首部字段(Response Header Fields)从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
—4>实体首部字段(Entity Header Fields)针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息
——其他
可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)
HTTP_75">三、HTTP状态码
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
http协议响应码:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受。(如200,请求成功)
3xx:重定向响应类,为了完成指定动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行(如404,请求资源不存在)
5xx:服务器错误,服务器不能正确执行一个正确的请求(如500,检查URL地址是否正确)
——《图解HTTP》链接
https://pan.baidu.com/s/12SXWNmFzr2PVzY7OUYJn0g