HTTP协议简介

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(例如 HTML)的应用层协议。HTTP 协议是一个无状态的协议,意味着服务器并不会记住任何之前的请求和响应。

HTTP 协议基于客户端-服务器架构模型,客户端发送一个请求到服务器,然后服务器处理请求并发送响应回客户端。

HTTP 协议采用了请求-响应模型,客户端向服务器发送请求,服务器收到请求后返回响应。请求和响应都包含了一个或多个头信息(header),以及一个可选的消息体(message body)。请求头包含了请求的方法(例如 GET、POST),URI(Uniform Resource Identifier,统一资源标识符)、协议版本等信息。响应头包含了响应状态码(例如 200 OK,404 Not Found),响应类型、服务器信息等。消息体包含了具体的请求或响应的内容。

HTTP协议的结构

请求和响应两大块组成

请求:请求行,请求头,空行,请求体

响应:状态行,响应头,空行,响应体

  1. 请求头(Request Header):包含了客户端发送请求时的一些附加信息,例如浏览器类型、编码格式、支持的压缩方法等等。请求头位于HTTP请求的第一行,通常以键值对的形式出现。

  2. 请求体(Request Body):对于POST请求来说,请求头之后还会有一个空行,随后是请求体,也就是客户端提交的数据。例如,表单数据、JSON数据等等。

  3. 响应头(Response Header):包含了服务器返回响应时的一些附加信息,例如返回数据的类型、编码格式、长度、缓存策略等等。响应头位于HTTP响应的第一行,也是以键值对的形式出现。

  4. 响应体(Response Body):服务器返回的实际数据,例如HTML页面、JSON数据等等。

HTTP请求头信息可以包括以下内容:

  • Accept: 告诉服务器客户端能够处理的媒体类型(MIME类型)和优先级顺序。
  • Accept-Charset: 告诉服务器客户端能够处理的字符集(比如utf-8)和优先级顺序。
  • Accept-Encoding: 告诉服务器客户端支持的压缩算法(比如gzip)和优先级顺序。
  • Authorization: 包含对客户端进行身份验证的凭据,通常是用户名和密码的base64编码。
  • Cache-Control: 控制请求/响应的缓存行为。
  • Connection: 控制是否保持连接以及如何处理连接的特定参数。
  • Content-Length: 发送的请求正文的长度。
  • Content-Type: 发送的请求正文的MIME类型。
  • Cookie: 包含之前设置的Cookie,通常用于在服务器上保持用户状态。
  • Host: 请求的主机名和端口号,如www.example.com:80。
  • User-Agent: 告诉服务器客户端的操作系统、浏览器、应用程序等信息。

HTTP响应头信息:

  1. Content-Type:指定响应中的文档类型,如"text/html"表示HTML文档、"application/json"表示JSON数据等。
  2. Content-Length:指定响应正文的长度。
  3. Cache-Control:指定客户端和服务器之间如何缓存响应,如"no-cache"表示每次请求都要从服务器获取最新数据,"max-age=3600"表示可以缓存1小时。
  4. Server:指定服务器的类型,如"Apache"、"nginx"等。
  5. Date:指定响应发送的日期和时间。
  6. Connection:指定客户端和服务器之间如何保持连接,如"keep-alive"表示保持连接不断开。
  7. Content-Encoding:指定响应正文的编码方式,如"gzip"、"deflate"等。
  8. Set-Cookie:指定在客户端存储的cookie信息,用于下一次请求时携带该cookie信息。

HTTP 状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

常见的请求方法:

  • GET:从服务器获取资源
  • POST:向服务器提交资源
  • PUT:在服务器上创建或更新资源
  • DELETE:从服务器上删除资源
  • HEAD:与 GET 方法类似,但只返回资源的头部信息
  • OPTIONS:获取服务器支持的请求方法和资源操作

Content-Type(内容类型):

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式

以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml: XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/pdf:pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:

  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

MINIE类型

MIME类型(MIME type)是指在互联网上标识文件格式及对应应用程序的一种标准化方式。它由类型和子类型两部分组成,中间用斜杠(/)隔开,例如text/html、image/jpeg、application/json等。

常见的 MIME 类型

  • 超文本标记语言文本 .html、.htmltext/html

  • 普通文本 .txt: text/plain

  • RTF 文本 .rtf: application/rtf

  • GIF 图形 .gif: image/gif

  • JPEG 图形 .jpeg、.jpg: image/jpeg

  • au 声音文件 .au: audio/basic

  • MIDI 音乐文件 mid、.midi: audio/midi、audio/x-midi

  • RealAudio 音乐文件 .ra、.ram: audio/x-pn-realaudio

  • MPEG 文件 .mpg、.mpeg: video/mpeg

  • AVI 文件 .avi: video/x-msvideo

  • GZIP 文件 .gz: application/x-gzip

  • TAR 文件 .tar: application/x-tar

HTTP协议的使用

  1. 建立连接:客户端与服务器之间建立TCP连接。
  2. 发送请求:客户端发送HTTP请求,请求包括请求方法、请求头、请求体等信息。
  3. 接收请求:服务器接收到客户端发送的HTTP请求。
  4. 处理请求:服务器根据请求方法、请求头等信息来处理请求,并返回相应的结果。
  5. 发送响应:服务器向客户端发送HTTP响应,响应包括响应头、响应体等信息。
  6. 接收响应:客户端接收到服务器发送的HTTP响应。
  7. 处理响应:客户端根据响应头、响应体等信息来处理响应。