HTTP协议简介
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(例如 HTML)的应用层协议。HTTP 协议是一个无状态的协议,意味着服务器并不会记住任何之前的请求和响应。
HTTP 协议基于客户端-服务器架构模型,客户端发送一个请求到服务器,然后服务器处理请求并发送响应回客户端。
HTTP 协议采用了请求-响应模型,客户端向服务器发送请求,服务器收到请求后返回响应。请求和响应都包含了一个或多个头信息(header),以及一个可选的消息体(message body)。请求头包含了请求的方法(例如 GET、POST),URI(Uniform Resource Identifier,统一资源标识符)、协议版本等信息。响应头包含了响应状态码(例如 200 OK,404 Not Found),响应类型、服务器信息等。消息体包含了具体的请求或响应的内容。
HTTP协议的结构
请求和响应两大块组成
请求:请求行,请求头,空行,请求体
响应:状态行,响应头,空行,响应体
-
请求头(Request Header):包含了客户端发送请求时的一些附加信息,例如浏览器类型、编码格式、支持的压缩方法等等。请求头位于HTTP请求的第一行,通常以键值对的形式出现。
-
请求体(Request Body):对于POST请求来说,请求头之后还会有一个空行,随后是请求体,也就是客户端提交的数据。例如,表单数据、JSON数据等等。
-
响应头(Response Header):包含了服务器返回响应时的一些附加信息,例如返回数据的类型、编码格式、长度、缓存策略等等。响应头位于HTTP响应的第一行,也是以键值对的形式出现。
-
响应体(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响应头信息:
- Content-Type:指定响应中的文档类型,如"text/html"表示HTML文档、"application/json"表示JSON数据等。
- Content-Length:指定响应正文的长度。
- Cache-Control:指定客户端和服务器之间如何缓存响应,如"no-cache"表示每次请求都要从服务器获取最新数据,"max-age=3600"表示可以缓存1小时。
- Server:指定服务器的类型,如"Apache"、"nginx"等。
- Date:指定响应发送的日期和时间。
- Connection:指定客户端和服务器之间如何保持连接,如"keep-alive"表示保持连接不断开。
- Content-Encoding:指定响应正文的编码方式,如"gzip"、"deflate"等。
- 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、.html:text/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协议的使用
- 建立连接:客户端与服务器之间建立TCP连接。
- 发送请求:客户端发送HTTP请求,请求包括请求方法、请求头、请求体等信息。
- 接收请求:服务器接收到客户端发送的HTTP请求。
- 处理请求:服务器根据请求方法、请求头等信息来处理请求,并返回相应的结果。
- 发送响应:服务器向客户端发送HTTP响应,响应包括响应头、响应体等信息。
- 接收响应:客户端接收到服务器发送的HTTP响应。
- 处理响应:客户端根据响应头、响应体等信息来处理响应。