网络协议基本知识
HTTP版本
HTTP/1.0
HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协议标准至今仍 被广泛使用在服务器端。
https://www.ietf.org/rfc/rfc1945.txt
HTTP/1.1
1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初 的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前最广泛使用的版本。
https://www.ietf.org/rfc/rfc2616.txt
HTTP/2.0
2015年HTTP/2.0正式发表。
https://www.ietf.org/rfc/rfc7540.txt
TCP/IP协议族
与互联网相关联的协议集合起来总称为TCP/IP。
网络是在TCP/IP协议族的基础上运作的,而HTTP属于它的一个子集。
TCP/IP的分层
应用层
各类通用的应用服务。
如 FTP、DNS、HTTP。
传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
如 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据 报协议)
网络层
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
链路层
用来处理连接网络的硬件部分。
TCP/IP通信传输流
这种把数据包装起来的做法叫做封装。
IP协议
IP实际上指IP协议的名称,注意不要搞混IP和IP地址。
IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。
ARP协议
IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才 能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
TCP协议
TCP 位于传输层,提供可靠的字节流服务。
字节流服务是指,为了方便传输, 将大块数据分割成以报文段(segment)为单位的数据包进行管理。TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
DNS协议
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
各协议与HTTP的关系
URL和URI
URI( Uniform Resource Identifier 统一资源标识符)
URL (Uniform Resource Locator 统一资源定位符)
其中URI包含URL
URI格式
绝对URI的格式如下
HTTP中的方法
GET
POST
PUT
HEAD
DELETE
OPTIONS
TRACE
CONNECT
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接 层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输 。
持久连接
管线化
Cookie
Cookie会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
HTTP报文
请求行
包含用于请求的方法,请求 URI 和 HTTP 版本。
状态行
包含表明响应结果的状态码,原因短语和 HTTP 版本。
首部字段
包含表示请求和响应的各种条件和属性的各类首部。
范围请求
执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围。 byte 范围的指定形式如下。
1 | //5001~10 000 字节 |
针对范围请求,响应会返回状态码为 206 Partial Content 的响应报 文。另外,对于多重范围的范围请求,响应会在首部字段 Content-Type 标明 multipart/byteranges 后返回响应报文。 如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整 的实体内容 。
状态码
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
---|---|---|
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
200 OK
204 No content
206 Partial Content
301 Moved Permanently
302 Found
303 See other
303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。
304 Not Modified
307 Temporary Redirect
临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标 准禁止 POST 变换成 GET,但实际使用时大家并不遵守 。
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在 服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error
503 Service Unavailable
HTTPS
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。