X

曜彤.手记

随手写写,关于互联网技术、产品与创业

HTTP 基础整理


最近花了点时间稍微整理了一下常见的 HTTP 相关的知识点,没有特别的往计算机网络的深度去挖,但常见的请求与相应的相关知识点还是需要清楚的。这里只会记录一些不是经常使用但是却需要了解的部分,并不是一个完整的知识列表,在阅读文章之前请知晓。

1. TCP/IP 协议族:

如果基于常用的四层网络体系,TCP 协议位于传输层,IP 协议位于网络层。传输层还包含常用的 UDP 协议。

2. 三次握手:

在建立基于 TCP 协议的连接时,客户端与服务器端会采用三次握手机制。首先客户端发送一个含有 SYN 标识的数据包,服务器返回一个含有 SYN/ACK 标识的数据包,最后客户端再返回一个 ACK 标识的确认数据包。如果在握手中的某一个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

3. ARP 协议与 DNS 协议:

DNS 协议用于将域名解析为 IP 地址。ARP 协议用于通过 IP 地址找到对应设备的 MAC 地址。ARP 广播机制:如果在当前的 ARP 本地缓存中没有找到对应 IP 的 MAC 地址,那么 ARP 协议会在当前域内发送一个广播请求,所有的客户机都会收到该广播请求,只有客户机发现该广播对应要询问的 IP 与自己相同时,该客户机会把自己的 MAC 地址作为响应返回。

4. URL 与 URI:

URI 是统一资源定位符的简写,主要用对应的定位符来定位某一种资源。URL 是 URI 的一个子集,主要用来表示资源在互联网中的地点。URI 格式:http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1。这里扩展一下“HTTP基本认证(Basic Authentication)”。上述的 URI 完整格式中“user:pass@”部分即对应一个基本认证的登录部分。基本认证主要需要服务器返回一个 “WWW-Authenticate Basic realm=”My Realm”” 头部,在该头部指定了服务器需要的认证方式和显示给用户的备注信息。服务器端可以通过 $_SERVER["PHP_AUTH_USER"]$_SERVER["PHP_AUTH_PW"]来获得用户输入的验证信息。

if (!validate($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
    http_response_code(401);    // 401 未授权: (Unauthorized);
    header("WWW-Authenticate:Basic realm='Please input you username and password!'");
    echo "Please input you username and password!";
    exit;
}

5. HTTP 无状态. 无连接:

HTTP 协议不会保留之前的请求或者响应,意味着每当有新的请求产生,就会有新的响应,这样做的好处是:可以做到快速的响应;缺点是:每次的请求可能包含大量的重复信息;HTTP 协议的无连接是指在每一次发送请求之前都需要重新进行三次握手连接,每次请求结束后连接都会被释放。直到 HTTP 1.1 中,引入了 “Connection: Keep-Alive” 这个头部的字段,使得 HTTP 请求的连接得以保持,具体保持连接的时间可以在服务器端进行控制。

6. 常用的 HTTP 方法:

7. 四次握手:

由于 TCP 协议是全双工的,所以在关闭连接时,要从客户端和服务端两个方向分别关闭。客户端先发送一个带有 FIN 标识的请求,服务器端返回一个 ACK 请求,完成一次关闭。服务器端同上。

8. HTTP 管线化技术:

该技术可以同时把多个 HTTP 请求放到一个 TCP/Socket 连接中,批量发送连接,仅支持 HTTP 1.1。本质是把多个 HTTP 消息放到同一个 TCP 分组中进行传输,在低延迟的连接里效果尤为突出。

9. 报文结构:

请求/响应报文首部和主体之间通过空行(CR+LF 0X0d, 0X0a)进行分割,报文首部中包含各种传输头部信息。

10. 报文实体压缩:

在传输二进制数据时,常常需要在服务器端将报文的实体数据进行压缩,常用的压缩技术有:

11. 分块传输编码:

服务器在响应请求并返回数据时可以实体主体分割成多个块(chunk),分块传输。每一个分块都会用一个十六进制的数来标记自己的大小,而分块的最后一个将会使用 “CR+LF” 来标记自己。该技术可以让客户端分段显示页面。

12. 多部分对象集合:

对应于每一个类型的对象实体,HTTP 协议都会采用一个 “boundary” 作为分隔符来进行区分。

13. 不常见状态码:

14. 代理技术:

代理服务器的基本行为就是转发接收到的客户端请求,代理并不对 URL 做任何的处理。无论是请求还是响应,每次经过一个代理服务器的转发都会向其头部追加一个 “Via” 字段,指明当前通过的代理主机信息。设置代理服务器主要用于以下几个方面。

15. End to end / Hop by hop:

端到端首部(End to end)此类首部不会在通过缓存代理时丢失,规定在缓存代理服务器转发时也要携带对应的首部直到发送到终点;逐跳首部(Hop by hop)该类别的首部只对单次转发有效,若通过缓存或者代理则不再向后转发,主要包括:Connection、Keep-Alive、Proxy 相关、Trailer、Upgrade、Transfer-Encoding 等首部。



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)