• 1. web及网络基础
    • 1.1. 通过HTTP访问web[C/S]
    • 1.2. TCP/IP四层模型
      • 1.2.1. 数据包的封装
    • 1.3. TCP/IP协议族
      • 1.3.1. 负责传输的IP协议
      • 1.3.2. 确保可靠的TCP协议
      • 1.3.3. 负责域名解析的DNS服务
      • 1.3.4. 各协议与HTTP的关系
    • 1.4. URI与URL
      • 1.4.1. URI的格式
      • 1.4.2. URI的示例
  • 2. HTTP协议
    • 2.1. 通过请求和响应的交换达成通信
      • 2.1.1. 请求报文
      • 2.1.2. 响应报文
    • 2.2. HTTP请求方法
      • 2.2.1. GET:获取资源
      • 2.2.2. POST:传输实体主体
      • 2.2.3. PUT:传输文件
      • 2.2.4. HEAD:获取报文头部
      • 2.2.5. DELETE:删除文件
      • 2.2.6. OPTIONS:询问支持的方法
      • 2.2.7. TRACE:追踪路径
      • 2.2.8. CONNECT:要求用隧道协议连接代理
    • 2.3. 持久连接
      • 2.3.1. keep-alive
      • 2.3.2. 管线化
      • 2.3.3. 使用cookie的状态管理

    1. web及网络基础

    1.1. 通过HTTP访问web[C/S]

    Http基础 - 图1

    1.2. TCP/IP四层模型

    Http基础 - 图2

    1.2.1. 数据包的封装

    Http基础 - 图3

    1.3. TCP/IP协议族

    1.3.1. 负责传输的IP协议

    使用ARP协议凭借MAC地址通信

    Http基础 - 图4

    1.3.2. 确保可靠的TCP协议

    Http基础 - 图5

    1.3.3. 负责域名解析的DNS服务

    Http基础 - 图6

    1.3.4. 各协议与HTTP的关系

    Http基础 - 图7

    1.4. URI与URL

    • URI(Uniform Resource Identifier):统一资源标识符
    • URL(Uniform Resource Locator):统一资源定位符;URL是URI的子集

    1.4.1. URI的格式

    Http基础 - 图8

    字段 说明
    协议 http/https
    登录信息(认证) user:pass@(一般没有)
    服务器地址 域名或IP
    服务器端口号 服务端口号,省略则取默认端口号
    带层次的文件路径 指定服务器上的文件路径来定位特指的资源
    查询字符串 使用查询字符串传入参数
    片段标识符 标记以获取资源中的子资源(文档内的某个位置)

    1.4.2. URI的示例

    Http基础 - 图9

    2. HTTP协议

    2.1. 通过请求和响应的交换达成通信

    Http基础 - 图10

    2.1.1. 请求报文

    Http基础 - 图11

    2.1.2. 响应报文

    Http基础 - 图12

    2.2. HTTP请求方法

    2.2.1. GET:获取资源

    Http基础 - 图13

    2.2.2. POST:传输实体主体

    Http基础 - 图14

    Http基础 - 图15

    2.2.3. PUT:传输文件

    PUT方法用来传输文件,像FTP协议一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

    因为自身不带验证机制,有安全问题,因此一般不采用。若配合验证机制或者REST标准则可使用。

    Http基础 - 图16

    2.2.4. HEAD:获取报文头部

    HEAD和GET一样但不返回报文主体部分,用于确认URI的有效性及资源的更新时间等。

    Http基础 - 图17

    2.2.5. DELETE:删除文件

    DELETE与PUT作用相反,但不带安全验证机制一般不采用。

    Http基础 - 图18

    Http基础 - 图19

    2.2.6. OPTIONS:询问支持的方法

    OPTIONS用来查询针对请求URI指定的资源支持的方法

    Http基础 - 图20

    2.2.7. TRACE:追踪路径

    TRACE用来查询发送出去的请求是怎样被加工修改/篡改的,因为易引发XST(跨站追踪)攻击,一般不使用。

    Http基础 - 图21

    2.2.8. CONNECT:要求用隧道协议连接代理

    CONNECT要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Source Sockets Layer:安全套接字)和TLS(Transport Layer Security:传输层安全)协议把通信内容加密后经网络隧道传输。

    方法格式如下:

    Http基础 - 图22

    Http基础 - 图23

    2.3. 持久连接

    2.3.1. keep-alive

    为解决每进行一次HTTP通信就要断开一次TCP连接,增加了通信量的开销,HTTP/1.1通过keep-alive持久连接,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

    持久连接减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

    Http基础 - 图24

    2.3.2. 管线化

    持续连接使得多数请求以管线化(pipelining)方式发送成为可能。管线化即同时并行发送多个请求,而不需要一个接一个等待响应。管线化技术比持续连接速度快,请求数越多越明显。

    Http基础 - 图25

    HTTP是无状态协议,不对之前发生过的请求和响应的状态进行管理,即无法根据之前的状态进行本次的请求处理。无状态协议的优点在于不必保存状态,减少服务器CPU及内存资源的消耗。

    cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务端发送的响应报文内的一个叫做Set-Cookie的首部字段通知客户端保存Cookie;当客户端再往服务端发送请求时,客户端自动在请求报文中加入Cookie值后发送出去。服务器发现Cookie后会检查从哪个客户端发送来的连接请求,对比服务器上的记录,最后得到之前的状态信息。

    Http基础 - 图26

    Http基础 - 图27

    Http基础 - 图28

    参考:

    • 《图解HTTP》