HTTP协议基础讲解
从基础概念到实际应用的HTTP协议知识
什么是HTTP?
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于在计算机网络之间传输超文本和其他资源的应用层协议。它是万维网(World Wide Web)的基础,使得浏览器和服务器之间可以进行数据交换。
HTTP使用请求-响应模型:客户端(如浏览器)发送请求,服务器返回响应。这种简单的模型使得HTTP易于实现和使用,同时也具有很好的扩展性。
HTTP基础概念
核心特点
- 无状态协议:HTTP不会保存客户端的任何信息,每个请求都是独立的
- 基于TCP:使用TCP作为传输层协议,确保数据传输的可靠性
- 请求-响应模型:客户端发送请求,服务器返回响应
- 灵活可扩展:通过头部字段和方法的扩展适应不同需求
URL结构
URL(Uniform Resource Locator)是资源在互联网上的地址,一个完整的URL包括以下部分:
https://www.example.com:8080/path?name=value#section
| 部分 |
说明 |
示例 |
| 协议 |
通信协议 |
https |
| 域名 |
服务器地址 |
www.example.com |
| 端口 |
服务器端口号 |
8080(HTTP默认80,HTTPS默认443) |
| 路径 |
资源路径 |
/path |
| 查询参数 |
传递给服务器的参数 |
name=value |
| 片段 |
页面内的位置标记 |
#section |
HTTP请求与响应
请求结构
HTTP请求由三部分组成:请求行、请求头和请求体。
GET /api/users HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: application/json
{"name": "张三", "age": 25}
响应结构
HTTP响应也由三部分组成:状态行、响应头和响应体。
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 128
Server: Apache/2.4
{"users": [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]}
HTTP方法
HTTP方法定义了对资源的操作类型,常用的HTTP方法包括:
| 方法 |
描述 |
特点 |
示例场景 |
| GET |
获取资源 |
幂等、可缓存、参数在URL中 |
查看文章、搜索结果 |
| POST |
提交数据 |
非幂等、不可缓存、参数在请求体中 |
用户注册、提交表单 |
| PUT |
更新资源 |
幂等、完整替换 |
更新用户信息 |
| DELETE |
删除资源 |
幂等 |
删除文章、取消订单 |
| PATCH |
部分更新 |
非幂等 |
修改用户头像 |
| HEAD |
获取头部信息 |
类似GET但无响应体 |
检查资源是否存在 |
| OPTIONS |
获取支持的方法 |
- |
CORS预检请求 |
HTTP状态码
HTTP状态码是服务器返回给客户端的三位数字代码,用于表示请求的处理结果。状态码分为5个类别:
1xx - 信息性状态码
表示请求已接收,需要继续处理。
- 100 Continue:服务器已收到请求的第一部分,客户端可以继续发送剩余部分。
- 101 Switching Protocols:服务器已根据客户端的请求切换到新的协议。
2xx - 成功状态码
表示请求已成功处理。
- 200 OK:请求成功,服务器已返回请求的资源。
- 201 Created:请求成功,服务器已创建了新的资源。
- 204 No Content:请求成功,但服务器没有返回任何内容。
3xx - 重定向状态码
表示需要客户端进一步操作才能完成请求。
- 301 Moved Permanently:请求的资源已永久移动到新的URL。
- 302 Found:请求的资源临时移动到新的URL。
- 304 Not Modified:请求的资源未修改,客户端可以使用缓存的版本。
4xx - 客户端错误状态码
表示客户端的请求有错误,服务器无法处理。
- 400 Bad Request:请求格式错误,服务器无法理解。
- 401 Unauthorized:请求需要用户认证。
- 403 Forbidden:服务器拒绝执行请求,即使认证也无法访问。
- 404 Not Found:请求的资源不存在。
- 405 Method Not Allowed:请求方法不被允许。
5xx - 服务器错误状态码
表示服务器在处理请求时发生了错误。
- 500 Internal Server Error:服务器内部错误,无法完成请求。
- 502 Bad Gateway:服务器作为网关或代理时,从上游服务器收到无效响应。
- 503 Service Unavailable:服务器暂时不可用,通常是因为过载或维护。
- 504 Gateway Timeout:服务器作为网关或代理时,上游服务器没有在规定时间内响应。
HTTP版本演进
HTTP/0.9(1991年)
最早的HTTP版本,非常简单,只支持GET方法,没有头部信息,只能传输HTML文本。
HTTP/1.0(1996年)
引入了多种请求方法(GET、POST、HEAD)、头部字段、状态码等概念,支持传输多种类型的数据。
HTTP/1.1(1997年)
目前使用最广泛的版本,引入了持久连接(Keep-Alive)、管道化请求、虚拟主机、缓存控制等特性。
HTTP/2(2015年)
基于SPDY协议,引入了二进制分帧、多路复用、头部压缩、服务器推送等特性,大幅提升了性能。
HTTP/3(2020年)
基于QUIC协议,使用UDP作为传输层,解决了TCP的队头阻塞问题,支持0-RTT连接建立、连接迁移等特性。