HTTP 协议

HTTP 协议

一、引言:Web 通信的本质

在学习 Go Web 开发时,我们通常会接触到大量的 HTTP 概念。

简单来说,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络传输协议。它规定了浏览器(客户端)与 Web 服务器(服务端)之间如何进行数据交换。

当你输入一个网址并按下回车时,本质上就是你的浏览器向目标服务器发送了一个符合 HTTP 规范格式的"请求包" 。服务器收到后解析该请求,处理业务逻辑,然后将处理结果以**特定格式的"响应包"**返回给你的浏览器。

这就是 Web 交互最底层的本质:请求与响应

二、HTTP 协议的核心特点

  1. 简单灵活:HTTP 基于文本,格式清晰,扩展性强(通过添加新的头部字段即可)。

  2. 无状态(Stateless) :HTTP 协议本身不保存客户端的状态。这意味着你上一次请求发了什么,服务器在这一次请求时完全不知道。这也是为什么我们需要 CookieSessionToken 来维持用户登录状态的原因。

  3. 应用层协议:它在 TCP/IP 协议栈中处于应用层,默认运行在 80 端口(HTTP)或 443 端口(HTTPS)。

  4. 持久连接(Keep-Alive):早期 HTTP 每次请求都需要新建 TCP 连接,效率很低。现代 HTTP/1.1 及以后版本支持 Keep-Alive,允许在一次 TCP 连接上发送多次 HTTP 请求。

三、HTTP 报文结构:拆解一次网络交互

HTTP 报文分为请求报文响应报文,结构非常类似,都包含四个部分:

1. HTTP 请求报文

  • 请求行 :包含请求方法、请求路径(URL)和 HTTP 版本。例如:GET /index.html HTTP/1.1

  • 请求头(Header) :包含一系列键值对,用于告诉服务器客户端的配置信息(如浏览器类型 User-Agent、期望的数据类型 Accept 等)。

  • 空行:请求头和请求体之间必须有一个空行,用来分隔。

  • 请求体(Body):通常是 POST 请求中携带的数据(例如表单提交的内容、JSON 数据)。

2. HTTP 响应报文

  • 状态行 :包含 HTTP 版本、状态码和状态描述。例如:HTTP/1.1 200 OK

  • 响应头(Header) :服务器返回的一些元数据,例如 Content-Type(数据格式,如 application/json)、Content-Length(数据长度)。

  • 空行:同样是分隔符。

  • 响应体(Body):服务器真正返回给客户端的数据(通常是我们前端看到的页面 HTML、图片或者是后端接口返回的 JSON 数据)。

四、核心方法与状态码

常用的 HTTP 方法:

  • GET:获取资源(只读,幂等)。

  • POST:提交/创建资源(通常用于表单提交)。

  • PUT:全量更新资源(幂等)。

  • DELETE:删除资源。

  • PATCH:局部更新资源。

(注:在微服务和 RESTful API 设计中,这些方法常与数据库的 CRUD 操作一一对应。)

常见的 HTTP 状态码:

  • 2xx 代表成功:

    • 200 OK:请求成功。
  • 3xx 代表重定向:

    • 301 Moved Permanently:资源被永久迁移。

    • 302 Found:资源临时迁移。

  • 4xx 代表客户端错误:

    • 400 Bad Request:客户端发送的请求语法错误。

    • 401 Unauthorized:未授权(未登录或 Token 过期)。

    • 403 Forbidden:服务器拒绝执行(权限不足)。

    • 404 Not Found:请求的资源不存在。

  • 5xx 代表服务端错误:

    • 500 Internal Server Error:服务器内部发生未预期的错误。

五、HTTPS:安全的 HTTP

HTTP 是明文传输的,存在窃听、篡改、冒充三大风险。HTTPS 则是 HTTP 的安全版本,它在 HTTP 和 TCP 之间加入了一层 SSL/TLS 加密层。

HTTPS 通过非对称加密实现身份认证和密钥交换,通过对称加密实现数据传输加密,从而保证通信的机密性、完整性和真实性。

六、总结

理解 HTTP 协议是学习 Web 开发的基石。它看似简单(只有请求和响应),但背后涵盖了网络通信、无状态设计、RESTful 设计规范等诸多计算机核心思想。

在浏览器中打开开发者工具(F12)的"网络"面板,可以观察每一次请求的 Headers 和 Response。

相关推荐
巨量HTTP19 小时前
Python爬虫动态换IP实战,彻底解决IP403封禁、限流问题(附完整代码)
爬虫·python·tcp/ip·http
TlSfoward1 天前
如何用 TLS 与 HTTP 指标降低误伤 TLSFOWARD抓包工具
网络·网络协议·http
沐苏瑶1 天前
计算机网络核心笔记:打通 TCP/UDP 与 HTTP/HTTPS 底层逻辑(重点上)
笔记·计算机网络·http·https
会编程的土豆1 天前
HTTP 是什么:你打开 localhost:8080 时发生了什么
网络·网络协议·http
闲猫2 天前
Spring AI对接Deepseek 使用Charles代理api.deepseek.com 拦截报文,查看Tool和Skill的本质
网络·网络协议·http
杏花春雨江南2 天前
JavaWeb HTTP长连接完整梳理
网络·网络协议·http
gongzhxu2 天前
DumpAny —— 一款支持 HTTP / gRPC / MySQL / Redis 的全能网络调试工具
网络·测试工具·http·rpc
超级赛博搬砖工2 天前
并发、多线程和HTTP连接之间有什么关系?
网络·网络协议·http
ControlRookie3 天前
第04篇_把 HTTP 放进 PLC:扫描周期、缓冲区、状态机和能力边界
http·codesys·plc通信