HTTP 概述
HTTP(HyperText Transfer Protocol)是一种用于在客户端和服务器之间传输数据的协议。它是Web的基础,支持文本、图像、视频等各种类型的数据传输。
1. HTTP 的特点
- 无状态:每个请求都是独立的,服务器不会记住之前的请求状态。
- 灵活性:支持多种数据格式(如HTML、JSON、XML等)。
- 可扩展性:可以通过HTTP头部添加自定义信息。
- 支持多种方法:如GET、POST、PUT、DELETE等。
2. HTTP 请求与响应
HTTP通信由请求和响应组成。
2.1 HTTP 请求
HTTP请求由以下部分组成:
- 请求行:包含请求方法、请求URI和HTTP版本。
- 请求头:包含关于请求的元数据(如内容类型、用户代理等)。
- 请求体(可选):包含要发送给服务器的数据,通常在POST请求中使用。
示例请求:
bash
复制
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 34
{"username": "john", "password": "123456"}
2.2 HTTP 响应
HTTP响应由以下部分组成:
- 状态行:包含HTTP版本、状态码和状态描述。
- 响应头:包含关于响应的元数据(如内容类型、长度等)。
- 响应体:包含服务器返回的数据。
示例响应:
css
复制
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 45
{"id": 1, "username": "john", "status": "created"}
3. HTTP 方法
HTTP定义了一组方法,用于指定对资源的操作:
- GET:请求指定的资源,通常用于获取数据。
- POST:向指定资源提交数据,通常用于创建新资源。
- PUT:更新指定资源的全部数据。
- PATCH:更新指定资源的部分数据。
- DELETE:删除指定资源。
- HEAD:类似于GET,但只请求响应头,不返回响应体。
- OPTIONS:请求服务器支持的HTTP方法。
4. HTTP 状态码
状态码用于表示服务器对请求的处理结果。常见的状态码包括:
-
1xx(信息性状态码) :
- 100 Continue:继续请求。
-
2xx(成功状态码) :
- 200 OK:请求成功。
- 201 Created:请求成功并创建了新资源。
- 204 No Content:请求成功,但没有返回内容。
-
3xx(重定向状态码) :
- 301 Moved Permanently:资源已永久移动。
- 302 Found:资源临时移动。
-
4xx(客户端错误状态码) :
- 400 Bad Request:请求无效。
- 401 Unauthorized:未授权,需要身份验证。
- 403 Forbidden:禁止访问。
- 404 Not Found:找不到请求的资源。
-
5xx(服务器错误状态码) :
- 500 Internal Server Error:服务器内部错误。
- 503 Service Unavailable:服务不可用。
5. HTTP 头部
HTTP头部用于传递额外的信息,分为以下几类:
- 请求头:如
User-Agent(客户端信息)、Accept(可接受的内容类型)等。 - 响应头:如
Content-Type(响应内容类型)、Content-Length(响应体长度)等。 - 通用头:如
Date(消息发送的日期)等。 - 实体头:如
Content-Encoding(内容编码)等。
6. HTTPS
HTTPS(HTTP Secure)是HTTP的安全版本,通过SSL/TLS加密传输数据,确保数据安全性和完整性。HTTPS使用443端口而不是HTTP的80端口。
7. HTTP/2 和 HTTP/3
- HTTP/2:引入了多路复用、头部压缩和服务器推送等特性,提升了性能和效率。
- HTTP/3:基于QUIC协议,进一步减少延迟,提高连接速度和安全性。