HTTP笔记(一)

1 了解Web 及网络基础

1.1 HTTP/1.1

1997年1月公布的HTTP/1.1是目前主流的HTTP协议版本。

1.2 网络基础TCP/IP

1.2.1 TCP/IP 协议族

TCP/IP全称Transmission Control Protocol/Internet Protocol

是Internet最基本的协议、Internet国际互联网络的基础,由网络层IP协议传输层TCP协议组成。

HTTP属于它内部的一个子集。(包括FTP,PPPOE,UDP,TCP,IP,ICMP,IEEE 802.3等等协议)

这些与互联网相关联的协议集合合起来总称为TCP/IP

1.2.2 TCP/IP 的分层管理

TCP/IP 协议族按层次分为4层应用层传输层网络层数据链路层

  • 应用层

    决定了向用户提供应用服务时通信的活动。

    例如FTP, DNS, HTTP, SMTP, TELNET, SNMP, DHCP, POP3

  • 传输层

    传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

    最主要:

    • TCP(Transmission Control Protocol, 传输控制协议) :

      面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方

    • UDP(User Data Protocol, 用户数据报协议) :

      无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。具有TCP所望尘莫及的速度优势。

  • 网络层

    处理在网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过了怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方

    IP协议

  • 链路层 (别名:数据链路层、网络接口层)

    用来处理连接网路的硬件部分。包括控制操作系统、硬件设备驱动、网卡、光纤等。

    硬件上的范畴均在链路层的作用范围之内。MAC地址工作在链路层。

    PPP, ARP, MTU

1.2.3 TCP/IP 通信传输流

利用TCP/IP协议族进行网络通信时,发送端从应用层往下走,接收端从链路层往上走。

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

1.3 与HTTP关系密切的协议:IP、TCP和DNS

1.3.1 负责传输的IP协议

位于网络层。作用是把各种数据包传送给对方

MAC地址(Media Access Control Address)

IP间的通信依赖于MAC地址,在中转时,会利用下一站的中转设备的MAC地址来搜索下一个目标。此时会采用ARP协议(Address Resolution Potocol, 地址解析协议) -> 网络层。可以根据IP反查出MAC地址。

路由选择是每个节点自由选择下一步到哪。无论哪个网络设备都无法全面掌握互联网中的细节。

1.3.2 确保可靠性的TCP协议

TCP位于传输层,提供可靠的字节流服务

字节流服务(Byte Stream Service) :将大块数据分割成报文段(Segment)为单位的数据包进行管理。

TCP协议为了方便会分割大数据,而且TCP协议能确定数据最终是否送达到对方。

为了准确无误的送达数据,TCP采用了三次握手(three-way handshaking)策略

1.4 URI和URL

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

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

URLURI 的子集。

2 简单的HTTP协议

2.1 HTTP是不保存状态的协议

HTTP是一种无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

2.2 请求方法

方法 说明 HTTP/1.1 HTTP/1.1
GET 获取资源
POST 传输实体主体
PUT 传输文件
DELETE 删除文件
HEAD 获得报文首部
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理
LINK 建立和资源之间的联系
UNLINK 断开连接关系

2.3 持久连接

2.3.1 持久连接

持久连接(HTTP Persistent Connections, 也称为 HTTP keep-alive 或 HTTP connection reuse)。

特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。

HTTP/1.1中,所有连接默认都是持久连接

2.3.2 管线化

一个请求发送后,不需要等待响应即可直接发送下一个请求。实现同时并发多个请求。

3 HTTP报文内的HTTP信息

3.1 编码提升传输速率

3.1.1 报文主体和实体主体的差异

  • 报文(message)

    HTTP通信的基本单位,由8位组字节流(octet sequence, 其中 octet 为8个比特)组成,通过HTTP通信传输。

  • 实体(entity)

    作为请求或响应的有效载荷(补充项)被传输,其内容由实体首部实体主体组成。

3.1.2 压缩传输的内容编码

常用的内容编码:

  • gzip(GNU zip)
  • deflate(zlib)
  • compress(UNIX 标准压缩)
  • identity(不进行编码)

4 返回结果的HTTP状态码

4.1 状态码

4.1.1 状态码类别

状态码 类别 原因短语
1xx Informational(信息性状态码) 接收的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务器错误状态码) 服务器处理请求出错

4.1.2 常用的状态码

状态码 类别 原因短语
100 Continue 请求的开始部分已收到,客户可以继续它的请求
200 OK 请求成功
201 Created 成功请求并创建了新的资源
202 Accepted 已接受请求,但是还没有处理完成
204 No Content 无内容,服务器成功处理,但未返回内容
301 Move Permanently 永久重定向,请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 与301类似,但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 功能与301,302类似,但是明确希望客户用GET方式获取资源
304 Not Modified 304跟重定向没有任何关系!客户端发送附带条件的请求(GET方法请求报文中包含If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since中任意首部),服务器端可能回应304(如表示资源为改变,可以使用未过期的缓存)
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 请求资源的访问被服务器拒绝了
405 Method Not Allowed 客户端请求中的方法被禁止
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求