HTTP超文本传输协议
- HTTP的基本原理
- HTTP请求的组成
- HTTP响应的组成
- HTTP请求方法
- HTTP状态码
- HTTP的无状态性和持久连接
- HTTPS(HTTP Secure)
- Cookie 和 Session
- Cookie
- Session
- 对比
- 总结
HTTP(超文本传输协议)是一种用于从Web服务器传输超文本到本地浏览器的协议,是Web通信的基础。它属于应用层协议,主要用于客户端和服务器之间的数据交换,尤其是Web内容(如HTML文档、图片、视频等)的传输。HTTP是一个无状态、基于请求-响应模型的协议。

HTTP的基本原理
HTTP协议基于客户端-服务器模型,通常客户端是Web浏览器,服务器是提供资源的服务器。基本通信过程如下:
- 客户端发送HTTP请求:用户在浏览器中输入网址或点击链接,浏览器向Web服务器发出HTTP请求,请求获取资源(网页、图片等)。
- 服务器返回HTTP响应:Web服务器接收到请求后,处理请求并返回响应,通常包括所请求的资源、状态码、头部信息等。
- 客户端解析响应:浏览器接收到服务器的响应后,解析其中的内容并呈现给用户。
HTTP请求的组成
HTTP请求主要由三部分组成:
-
请求行(Request Line):
- 请求方法:HTTP方法(如GET、POST、PUT、DELETE、HEAD等),表示客户端希望对服务器资源执行的操作。
- 请求URL:客户端请求的资源路径。
- HTTP版本:请求使用的HTTP协议版本(如HTTP/1.1或HTTP/2)。
例如,GET /index.html HTTP/1.1。
-
请求头(Request Headers):
提供请求的附加信息,通常包括:
- User-Agent:客户端浏览器的标识。
- Host:请求的目标主机名。
- Content-Type:请求体的媒体类型(在POST请求中常见)。
- Accept:客户端能够处理的响应内容类型。
- Cookie:客户端存储的会话信息。
- 请求体(Request Body):
通常用于POST、PUT请求,包含发送到服务器的数据,如表单数据、JSON数据等。
HTTP响应的组成
HTTP响应也由三个主要部分组成:
-
响应行(Response Line):
- HTTP版本:响应使用的HTTP协议版本。
- 状态码:服务器返回的状态码,表示请求的处理结果。
- 状态消息:对状态码的简短描述。
例如,HTTP/1.1 200 OK。
-
响应头(Response Headers):
包含关于服务器及响应的附加信息,常见的响应头包括:
- Content-Type:响应体的数据类型(如text/html、application/json等)。
- Content-Length:响应体的长度。
- Server:服务器的名称及版本。
- Set-Cookie:服务器返回的cookie信息。
- 响应体(Response Body):服务器返回的数据,通常是请求的资源内容,如HTML页面、图像文件、JSON数据等。
HTTP请求方法
HTTP协议定义了多个方法,常见的请求方法有:
- GET:从服务器获取资源。GET请求不应有请求体(但可以有查询参数)。这是最常用的HTTP请求方法。
- POST:将数据发送到服务器,常用于提交表单或上传文件。POST请求通常包含请求体,提交的数据可以是表单数据或JSON。
- PUT:向服务器提交资源,并要求服务器存储该资源。PUT通常用来更新已有资源。
- DELETE:请求删除指定资源。
- HEAD:与GET类似,但只返回响应头,不返回响应体。通常用于获取资源的元信息。
- OPTIONS:询问服务器支持哪些HTTP方法,通常用于跨域请求。
- PATCH:部分更新资源,类似PUT,但只修改资源的部分内容。
HTTP状态码
HTTP状态码是服务器在处理请求时返回的数字代码,用来表示请求的结果。常见的HTTP状态码包括:
- 1xx:信息性状态码:
- 100 Continue:客户端可以继续发送请求。
- 2xx:成功状态码:
- 200 OK:请求成功,服务器返回请求的资源。
- 201 Created:请求成功,且服务器创建了新资源。
- 204 No Content:请求成功,但没有返回任何内容。
- 3xx:重定向状态码:
- 301 Moved Permanently:资源已永久移动到新的位置。
- 302 Found:资源暂时移动到新的位置。
- 304 Not Modified:资源未修改,可以使用缓存的版本。
- 4xx:客户端错误状态码:
- 400 Bad Request:请求无效,服务器无法理解。
- 401 Unauthorized:需要身份验证。
- 403 Forbidden:禁止访问,服务器理解请求但拒绝执行。
- 404 Not Found:请求的资源不存在。
- 5xx:服务器错误状态码:
- 500 Internal Server Error:服务器内部错误。
- 502 Bad Gateway:网关错误,服务器作为网关或代理时收到无效响应。
- 503 Service Unavailable:服务器暂时不可用。
HTTP的无状态性和持久连接
- 无状态性:HTTP协议本身是无状态的,这意味着每个请求都是独立的,服务器不记录客户端的状态信息。因此,每次请求都需要携带完整的信息(如身份验证信息、会话信息等)。
- 持久连接:HTTP/1.1默认使用持久连接,意味着一次TCP连接可以处理多个HTTP请求/响应,这比每个请求都建立新的连接更加高效。持久连接通过Connection: keep-alive头部来控制。
HTTPS(HTTP Secure)
HTTPS是HTTP的安全版本,采用SSL/TLS协议加密HTTP请求和响应的数据,从而确保数据的机密性、完整性和身份认证。
- SSL/TLS:为HTTP提供加密层(SSL已经被TLS取代,但两者通常被统称为SSL/TLS)。
- 安全特性:
- 数据加密:确保数据传输过程中不被窃听。
- 身份验证:确保客户端和服务器的身份。
- 数据完整性:确保数据在传输过程中未被篡改。
Cookie 和 Session
Cookie 和 Session 都是用于在客户端和服务器之间存储信息的技术,通常用来在用户与网站交互时保存状态和身份信息。尽管它们的目的相似,但工作原理和使用场景有所不同。
示例图:
Cookie
Cookie 是存储在用户浏览器中的小数据文件,用于保存用户的会话信息和其他状态信息。
- 存储位置:保存在用户的浏览器中。
- 存储内容:可以存储各种数据,如用户登录信息、首选项、购物车内容等。
- 有效期:可以设置过期时间(如max-age或expires),如果不设置,默认是会话级别,即浏览器关闭后消失。
- 传输方式:每次用户向服务器发送请求时,浏览器会自动将与该域名相关的cookie包含在请求头中(Cookie)。
- 大小限制:每个cookie的大小通常不能超过4KB,且每个域名最多可以存储20个左右的cookie。
Session
Session 是服务器端用于保存用户会话信息的机制。与cookie不同,session的数据存储在服务器端,客户端仅保存一个唯一的标识符(即session ID)。
- 存储位置:存储在服务器上。
- 存储内容:可以存储大量数据,例如用户的身份、购物车内容、访问记录等。
- 有效期:session的有效期通常是基于会话的,一般在用户关闭浏览器或设定的过期时间后失效。
- 传输方式:服务器会在响应中将一个唯一的session ID通过cookie或URL传递给客户端,客户端每次请求时会携带这个ID,服务器通过ID找到对应的会话数据。
对比
总结
HTTP协议是Web通信的核心协议,它通过请求和响应模型提供了高效的网络通信。虽然HTTP本身是无状态的,随着HTTP/2和HTTPS的出现,Web的效率和安全性得到了显著提升。了解HTTP协议及其各种特性是开发Web应用和服务的基础。