一、HTTP协议简介

HTTP协议是一个基于TCP的应用层协议,1991发布的HTTP 0.9是第一个版本,主要用于应用数据的传输。

1.1 HTTP URL格式

HTTP使用URL定位网络资源,HTTP URL的格式如下所示:
http://host[:port][path]

  • http:表示要通过HTTP协议来定。
  • host:服务器的域名或IP地址。
  • port:服务在服务器中的端口号,默认为80端口。
  • path:请求资源的路径。

    1.2 HTTP请求方法

    HTTP常用请求方法及其作用如下:

  • GET:请求获取URI标识的资源。

  • POST:向URI标识的资源添加新的数据。
  • HEAD:请求获取URI标识的资源的响应消息的报头。
  • PUT:请求服务器存储一个资源,该资源使用URI作为标识。
  • DELETE:请求服务器URI标识的资源。
  • OPTIONS:请求查询服务器性能。

    二、HTTP协议的主要特点

    HTTP协议具有以下特点:
  1. 支持C/S模式广泛应用于客户端服务器之间的通信。
  2. 简单快速,客户端向服务器请求数据的时候,只需要传输请求方法和路径。
  3. 使用灵活,可以传输任意类型的数据,传输类型由Content-Type头进行指定。
  4. 无连接,每次连接只处理一个请求。
  5. 无状态,在不使用Cookie的情况下无法保存数据。
  6. 使用文本作为报文。

    三、HTTP协议请求报文

    一个HTTP请求报文由请求行、 请求报头、 空行和请求数据4个部分组成
    HTTP请求报文格式.png
    请求行
    请求行由请求方法、 URL字段和HTTP协议的版本
    比如请求百度首页的数据的请求行为:
    GET https://www.baidu.com HTTP/1.1
    请求报头
    请求数据

    四、HTTP协议响应报文

    HTTP响应报文格式.png
    HTTP的响应报文由状态行、 响应报头、 响应正文组成。
    状态行包括HTTP协议版本、状态码、状态码的描述,请求成功的状态行如下所示:
    HTTP/1.1 200 OK
    状态码由3位数字组成, 第一个数字定义了响应的类别。
  • 100-199: 指示信息, 收到请求, 需要请求者继续执行操作。
  • 200-299: 请求成功, 请求已被成功接收并处理。
  • 300-399: 重定向, 要完成请求必须进行更进一步的操作。
  • 400-499: 客户端错误, 请求有语法错误或请求无法实现。
  • 500-599: 服务器错误, 服务器不能实现合法的请求。

常见的状态码:

  • 200 OK: 客户端请求成功。
  • 400 Bad Request: 客户端请求有语法错误, 服务器无法理解。
  • 401 Unauthorized: 请求未经授权, 这个状态码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden: 服务器收到请求, 但是拒绝提供服务。
  • 500 Internal Server Error: 服务器内部错误, 无法完成请求。
  • 503 Server Unavailable: 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常。

    五、HTTP协议报头

    5.1 通用报头

  • Date:表示消息产生的时间。

  • Connection: 允许发送指定连接的选项。 例如指定连接是连续的; 或者指定“close”选项, 通知服务

器, 在响应完成后, 关闭连接。

  • Cache-Control: 用于指定缓存指令, 缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现) , 且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制) 。

    5.2 请求报头

    请求报头通知服务器关于客户端请求的信息。 典型的请求报头如下所示。

  • Host: 请求的主机名, 允许多个域名同处一个IP地址, 即虚拟主机。

  • User-Agent: 发送请求的浏览器类型、 操作系统等信息。
  • Accept: 客户端可识别的内容类型列表, 用于指定客户端接收哪些类型的信息。
  • Accept-Encoding: 客户端可识别的数据编码。
  • Accept-Language: 表示客户端支持的语言。
  • Connection: 允许客户端和服务器指定与请求/响应连接有关的选项。 例如, 这时为Keep-Alive则表示保持连接。
  • Transfer-Encoding: 告知接收端为了保证报文的可靠传输, 对报文采用了什么编码方式。

    5.3 响应报头

    用于服务器传递自身信息的响应。 常见的响应报头如下所示。

  • Location: 用于重定向接收者到一个新的位置, 常用在更换域名的时候。

  • Server: 包含服务器用来处理请求的系统信息, 与User-Agent请求报头是相对应的。

    5.4 实体报头

    实体报头用来定义被传送资源的信息, 其既可用于请求也可用于响应。 请求和响应消息都可以传送一
    个实体。 常见的实体报头如下所示。

  • Content-Type: 发送给接收者的实体正文的媒体类型。

  • Content-Lenght: 实体正文的长度。
  • Content-Language: 描述资源所用的自然语言。
  • Content-Encoding: 实体报头被用作媒体类型的修饰符。 它的值指示了已经被应用到实体正文的附加内容的编码, 因而要获得Content-Type报头域中所引用的媒体类型, 必须采用相应的解码机制。
  • Last-Modified: 实体报头用于指示资源的最后修改日期和时间。
  • Expires: 实体报头给出响应过期的日期和时间。