HTTP 协议

HTTP 协议

一、引言:Web 通信的本质

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

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

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

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

二、HTTP 协议的核心特点

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

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

  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。

相关推荐
青瓦梦滋6 小时前
【在线五子棋对战】游戏匹配模块
网络·c++·网络协议·http·https
聚美智数20 小时前
网站HTTP状态查询-SEO优化
网络·网络协议·http
云梦谭1 天前
WebSocket 协议详解:从 HTTP 握手到全双工通信
websocket·网络协议·http
白帽攻防录1 天前
SRC 挖洞:QUIC 协议栈双 RCE,HTTP/3 的新攻击面怎么挖
网络·网络协议·http·网络安全·http/3
比兔代理1 天前
HTTP 代理与 TLS 指纹:如何避免被识别为代理流量?
网络·网络协议·http
上海云盾-小余1 天前
自定义端口 HTTPS 部署:高防接入遇到的问题与调优方案
网络协议·http·https
是个西兰花2 天前
https 协议原理
网络协议·http·https
xixiaoyunya2 天前
监控网页插件异常:用 HTTP 探针做第三方依赖的“外视”监测
网络·网络协议·http
事圆则缓2 天前
HTTP 请求是怎么走的:从 Android 页面到服务端响应
android·网络协议·http
0+1112 天前
Linux --HTTPS协议原理
网络协议·http·https