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。

相关推荐
uoKent7 小时前
计网中的HTTP/HTTPS
网络协议·http·https
ControlRookie13 小时前
第22篇_源码加更 04|chunked 解码器和十六进制块长度解析
http·codesys·plc通信·开源源码
且白15 小时前
node、npm通过http-server架设本地服务器(可解决跨域)
服务器·网络协议·http
hiahiahia12316 小时前
HTTP Streaming:为什么 AI 回答经常要边生成边返回?
人工智能·网络协议·http
susplus19 小时前
【HTTP协议】HTTP介绍及基础【C语言爬虫实现】
c语言·爬虫·http·万维网
xieliyu.20 小时前
计算机网络:Fiddler 抓包工具使用教程 + HTTP 协议报文格式详解
java·笔记·计算机网络·测试工具·http·java-ee·fiddler
程序员夏洛20 小时前
HTTP 2.0 和 3.0 有什么区别?
网络·网络协议·http
驭渊的小故事1 天前
网络原理04(http协议详细解析3)(2000详细解析HTTPS的工作原理)
网络·网络协议·http
IPdodo_2 天前
2026年爬虫代理 IP 选择指南:从可用率、延迟到成本验收
网络协议·tcp/ip·scrapy·http·https·beautifulsoup·httpx
程序员夏洛2 天前
HTTP 请求包含哪些内容,请求头和请求体有哪些类型?
网络·网络协议·http