目录
一、基本概念
二、HTTP报文(结构)
(一) 请求报文
(二) 响应报文
三、HTTP请求方法
1. GET方法
2. POST方法
3. PUT方法
4. HEAD方法
5. DELETE
6. OPTIONS
一、知识扩展
7. TRACE
8. CONNECT
四、HTTP持久通信
(一) HTTP keep-alive
(二) HTTP请求并发
1. 管线化
2. 多路复用
(三) Cookie
1. Cookie的由来
2. Cookie的基本概念
3. Cookie的工作流程
五、HTTP状态码
(一) 常见状态码
六、HTTPS概述
(一) SSL/TLS
HTTP(超文本传输协议)用于在客户端(如浏览器)和服务器之间传输超文本数据,例如网页、图片、视频等。
用于HTTP协议交互的信息被称为HTTP报文。
HTTP报文分为报文首部和报文主体两部分组成,两者由空行来划分,通常,不一定要有报文主体。
HTTP 请求报文由客户端(如浏览器)发送到服务器,包含以下三个主要部分:
此例中为 GET 请求,没有请求体,因为 GET 请求通常只获取资源,不发送数据。
GET /index.html HTTP/1.1 #请求行
Host: www.example.com #此行到底是请求头
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
注:响应头部和响应体之间有一个空行,表示头部信息结束。
HTTP/1.1 200 OK #状态行
Date: Sun, 25 May 2025 17:39:00 GMT #响应头
Server: Apache/2.4.41 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 125
Connection: keep-alive
#空行(CR+LF,表示头部信息结束)
#响应体
Welcome
Hello, World!
向请求URI指定的资源发送请求报文时,采用称为方法的命令。
方法的作用在于,可以指定请求的资源按期望产生某种行为。
注:方法名区分大小写,要用大写字母。。
请求
GET /index.html HTTP/1.1
Host:www.baidu.com
响应
返回index.html的页面资源
请求:
POST /abc.php HTTP/1.1
Host: www.baidu.com
Content-Length: 1560
Content-Type: application/x-www-form-urlencoded
[1560字节的请求体数据]
响应:
返回abc.php接收数据的处理结果
请求:
PUT /index.html HTTP/1.1
Host: www.baidu.com
Content-Length: 1560
Content-Type: text/html
响应:
返回状态码204 No Content(表示服务器成功处理了请求,但不返回任何响应体)
HEAD /index.html HTTP/1.1
Host:www.baidu.com
响应:
返回index.html有关的响应头
请求:
DELETE /index.html HTTP/1.1
Host: www.baidu.com
响应:
返回状态码204 No Content(表示服务器成功处理了请求,但不返回任何响应体)
请求:
OPTIONS * HTTP/1.1
Host: www.baidu.com
响应:
HTTP/1.1 200 OK
Allow:GET,POST,HEAD,OPTIONS
如果不是访问特定资源而是对服务器本身发起的请求,可以用 * 来代替请求URI。
请求:
TRACE /index.html HTTP/1.1
Host: www.baidi.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
响应:
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 145
#空行
TRACE /index.html HTTP/1.1 #此行以下都是响应体,体现的是客户端的请求内容。
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
请求:
CONNECT www.baidu.com:443 HTTP/1.1
Host: www.baidu.com
响应:
HTTP/1.1 200 Connection Established
在 HTTP/1.0 中,每次请求都需要重新建立一次 TCP 连接,请求完成后立即关闭(即短连接)。
每个请求都经历完整的连接流程:
TCP 三次握手 → HTTP 请求/响应 → TCP 四次挥手
假如你要请求三个资源,就得重复三次这样的过程,网络开销大、性能低下。
为了解决这个问题,HTTP/1.1 引入了“持久连接”(HTTP Persistent Connection)。通过一个 TCP 连接,客户端可以连续发送多个 HTTP 请求,直到一方显式关闭连接为止:
TCP 三次握手 → 多次 HTTP 请求/响应→ TCP 四次挥手
持久连接的实现方式如下:
HTTP/1.0并不允许连续多个HTTP请求,默认其是请求-响应完成之后再请求-响应。没有并发。
HTTP 管线化是 HTTP/1.1 引入的特性,它允许客户端在一个持久连接上,连续发送多个 HTTP 请求,而不必等待前一个响应回来。
Request A → Request B → Request C (连续发)
← Response A ← Response B ← Response C(按顺序回)
HTTP/2.0引入了多路复用,它允许多个请求和响应在一个 TCP 连接中完全并行交错地传输,互不阻塞、顺序无关,完全解决了 HTTP/1.1 管线化的所有问题。
假设要求登录认证的Web页面本身无法进行状态的管理,那每次跳转新页面就会出现两张情况:
由于无状态协议的特点可以减少服务器CPU和内存资源的消耗,所以既要保存无状态这个特征又要解决类似的矛盾所以引进了Cookie技术。
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
Set-Cookie: session_id=abc123; Path=/; Expires=Wed, 01 Jun 2025 00:00:00 GMT
Cookie: session_id=abc123
HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常、通知出现的错误等工作。
状态码如:200 OK,以3位数字和原因短句组成。
数字中第一位指定了响应类别,后两位无分类。响应类别有以下5种。
类别 |
原因短句 |
|
1XX |
Informational(信息性状态码) |
接收的请求正在处理 |
2XX |
Success(成功状态码) |
请求正常处理完毕 |
3XX |
Redirection(重定向状态码) |
需要进行附加操作以完成请求 |
4XX |
Client Error(客户端错误状态码) |
服务器无法处理请求 |
5XX |
Server Error(服务器错误状态码) |
服务器处理请求出错 |
HTTPS并非是应用层的一种新协议,而是HTTP通信接口部分用SSL和TLS协议代替而已。
SSL/TLS(Secure Sockets Layer / Transport Layer Security)是一种安全协议,用于在客户端和服务器之间建立加密连接,以保护数据的机密性和完整性。