http协议概述
HTTP 协议是一种 应用层协议,用于 Web 浏览器(客户端)和 Web 服务器之间通信。它采用了“你说我听”的模式:客户端发起请求(Request),服务器响应结果(Response)。
客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。 服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
http请求方法
方法 | 作用描述 |
---|---|
GET | 从服务器获取资源(只读) |
POST | 向服务器提交数据(如表单、上传文件) |
PUT | 用客户端提供的数据替换服务器上的资源 |
DELETE | 删除服务器上的指定资源 |
HEAD | 类似 GET,但只返回响应头,不返回主体 |
OPTIONS | 查询服务器支持哪些 HTTP 方法 |
TRACE | 回显客户端请求,用于测试和诊断 |
CONNECT | 建立网络通道(如 HTTPS 的隧道,用于代理) |
URL
URL(统一资源定位符,Uniform Resource Locator)
部分名称 | 示例中的内容 | 说明 |
---|---|---|
1. 协议 | http | 使用的传输协议,如 http、https、ftp 等 |
2. 层级标识 | // | 固定符号,标记协议后面开始写地址部分 |
3. 凭证信息 | (省略) | 如用户名:密码@,用于需要身份认证的服务 |
4. 服务器 | www.luffycity.com | 通常是域名,有时也可能是 IP 地址 |
5. 端口号 | :80 | 通信端口,http 默认是 80,https 是 443,可省略 |
6. 路径 | /news/index.html | 表示服务器上的具体资源位置(文件路径) |
7. 查询参数 | ?id=250&page=1 | 提供额外的数据,GET 请求用的参数 |
8. 片段标记 | #xxx (例中没有) | 页面内部锚点,如跳转到某段内容的位置 |
端口(Port)是计算机网络中的一个数字标识符,它用来区分一台服务器上不同的服务或程序
服务类型 | 协议 | 端口号 | 说明 |
---|---|---|---|
HTTP 网页服务 | http | 80 | 最常见,访问网页时使用 |
HTTPS 安全网页 | https | 443 | 加密网页 |
FTP 文件传输 | ftp | 21 | 传输文件 |
SSH 远程登录 | ssh | 22 | 用于远程管理服务器 |
SMTP 邮件发送 | smtp | 25 | 发邮件 |
传输协议是指网络中用来定义通信规则和数据格式的协议,不同的协议适用于不同的应用场景和需求。
协议名称 | 全称 | 主要用途 | 端口号 | 特点描述 |
---|---|---|---|---|
HTTP | HyperText Transfer Protocol | 网页浏览 | 80 | 无状态、基于文本,浏览器和服务器通信协议 |
HTTPS | HTTP Secure | 安全网页浏览 | 443 | 基于HTTP,使用SSL/TLS加密传输 |
FTP | File Transfer Protocol | 文件上传与下载 | 21 | 支持匿名及认证访问,专用于文件传输 |
SMTP | Simple Mail Transfer Protocol | 发送邮件 | 25 | 服务器之间邮件发送协议 |
POP3 | Post Office Protocol 3 | 接收邮件 | 110 | 邮件下载到客户端,本地查看 |
IMAP | Internet Message Access Protocol | 在线查看邮件 | 143 | 支持服务器上邮件管理,客户端同步 |
TCP | Transmission Control Protocol | 可靠传输的传输层协议 | — | 面向连接,保证数据顺序和完整 |
UDP | User Datagram Protocol | 快速无连接传输 | — | 无连接,不保证可靠性,适合实时应用 |
SSH | Secure Shell | 远程安全登录 | 22 | 加密传输,取代Telnet |
Telnet | — | 远程登录 | 23 | 不加密,已被SSH替代 |
http特点
响应-请求模式
客户端发起一个请求,服务端响应一个请求,若客户端没有发起请求,那么服务端也不会响应任何请求。
无状态
服务器不会记住浏览器的“历史请求”或“身份信息”,每次请求都是“全新”的。
服务器若想要做到“记住用户”,那么需要通过使用cookie记录登录信息。
无连接
浏览器每次向服务器发送请求,服务器处理后就断开连接。也就是说每次连接只能处理一个请求,HTTP/1.0 是典型的“无连接”,HTTP/1.1 默认会尝试“短暂保持连接”,但整体仍然是“请求-响应-断开”的流程。
http状态码
分类代码 | 分类名称 | 说明 |
---|---|---|
1xx | 信息提示 | 请求已接收,继续处理 |
2xx | 成功 | 请求成功并返回所需信息 |
3xx | 重定向 | 需要客户端进一步操作 |
4xx | 客户端错误 | 请求错误或权限问题 |
5xx | 服务器错误 | 服务器无法完成处理请求 |
状态码 | 名称 | 中文含义说明 |
---|---|---|
100 | Continue | 继续,客户端应继续其请求 |
101 | Switching Protocols | 切换协议,服务器正在切换协议 |
102 | Processing (WebDAV) | 正在处理请求,避免客户端超时 |
103 | Early Hints | 响应头预告,用于性能优化 |
状态码 | 名称 | 含义说明 |
---|---|---|
200 | OK | 请求成功 |
201 | Created | 请求成功并创建了资源 |
202 | Accepted | 请求已接受,尚未处理 |
203 | Non-Authoritative Info | 返回信息非原始服务器 |
204 | No Content | 请求成功但无返回内容 |
205 | Reset Content | 重置内容,要求重置文档视图 |
206 | Partial Content | 返回部分内容(用于断点续传) |
207 | Multi-Status | 多状态(WebDAV 扩展) |
208 | Already Reported | 已报告(WebDAV) |
226 | IM Used | 实体已使用(RFC 3229) |
状态码 | 名称 | 含义说明 |
---|---|---|
300 | Multiple Choices | 多种选择 |
301 | Moved Permanently | 永久移动(资源已永久转移新地址) |
302 | Found | 临时移动(当前暂时使用别的地址) |
303 | See Other | 查看其他资源(用于重定向 POST) |
304 | Not Modified | 资源未修改(可使用缓存) |
305 | Use Proxy | 使用代理(已废弃) |
306 | Switch Proxy | 切换代理(保留码,未使用) |
307 | Temporary Redirect | 临时重定向,方法不变 |
308 | Permanent Redirect | 永久重定向,方法不变 |
状态码 | 名称 | 含义说明 |
---|---|---|
400 | Bad Request | 错误请求(语法错误) |
401 | Unauthorized | 未授权,需要认证 |
402 | Payment Required | 需要付款(保留) |
403 | Forbidden | 禁止访问(权限问题) |
404 | Not Found | 未找到资源 |
405 | Method Not Allowed | 方法不允许 |
406 | Not Acceptable | 不可接受的响应类型 |
407 | Proxy Authentication Required | 代理认证要求 |
408 | Request Timeout | 请求超时 |
409 | Conflict | 请求冲突 |
410 | Gone | 资源已永久删除 |
411 | Length Required | 需要 Content-Length 头 |
412 | Precondition Failed | 前提条件失败 |
413 | Payload Too Large | 请求体过大 |
414 | URI Too Long | URI 过长 |
415 | Unsupported Media Type | 不支持的媒体类型 |
416 | Range Not Satisfiable | 请求范围不符合 |
417 | Expectation Failed | 期望失败 |
418 | I'm a teapot | 我是茶壶(愚人节彩蛋) |
421 | Misdirected Request | 请求方向错误 |
422 | Unprocessable Entity | 实体无法处理(语义错误) |
423 | Locked | 资源被锁定(WebDAV) |
424 | Failed Dependency | 依赖失败(WebDAV) |
425 | Too Early | 太早发送请求 |
426 | Upgrade Required | 需要升级协议 |
428 | Precondition Required | 需要前提条件 |
429 | Too Many Requests | 请求太多,被限流 |
431 | Request Header Fields Too Large | 请求头字段太大 |
451 | Unavailable For Legal Reasons | 因法律原因不可用 |
状态码 | 名称 | 含义说明 |
---|---|---|
500 | Internal Server Error | 服务器内部错误 |
501 | Not Implemented | 尚未实现 |
502 | Bad Gateway | 网关错误 |
503 | Service Unavailable | 服务不可用 |
504 | Gateway Timeout | 网关超时 |
505 | HTTP Version Not Supported | 不支持的 HTTP 版本 |
506 | Variant Also Negotiates | 协议协商错误 |
507 | Insufficient Storage | 存储空间不足(WebDAV) |
508 | Loop Detected | 检测到循环(WebDAV) |
510 | Not Extended | 未扩展支持 |
511 | Network Authentication Required | 需要网络认证 |
请求报文
例子:
请求头部:
-
Host:指定要访问的服务器的主机名(域名)和端口号。
-
User-Agent:标识发出请求的客户端类型(浏览器、操作系统、设备等),便于服务器做兼容性处理或统计分析。
-
Accept:告诉服务器客户端能接收哪些类型的响应内容。
-
Accept-Encoding:告知服务器客户端支持的压缩编码格式。
-
Accept-Language: 指定客户端希望的响应语言。
-
Content-Type:指定请求体中数据的格式(Content Body),便于服务器正确解析。
-
Content-Length:告知服务器请求体(body)的字节长度。
响应报文
例子:
字段名 | 作用说明 | 示例值 |
---|---|---|
Server | 表示服务器软件的信息,可能暴露后端服务类型和版本 | nginx/1.18.0 , Apache , Gunicorn/20.1.0 |
Date | 响应生成的时间,通常由服务器自动添加 | Sat, 28 Jun 2025 11:45:00 GMT |
Vary | 告诉缓存服务器:根据哪些请求头字段返回不同内容(常用于压缩/多语言) | Accept-Encoding , User-Agent |
Content-Length | 响应体的字节长度,客户端据此决定内容接收是否完整 | 1024 , 348 |
Content-Type | 表示响应体的数据类型和编码格式,决定浏览器如何处理内容 | text/html; charset=UTF-8 , application/json |