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。

相关推荐
运维全栈笔记12 小时前
致远 OA HTTPS 配置避坑指南
网络协议·http·https
A_humble_scholar15 小时前
Linux 网络基础(三)下的 HTTP 核心详解:从请求响应到状态管
linux·网络·http
pcplayer2 天前
Delphi WebService 使用 HTTP Header 管理 Session
http·webservice·soap·web server·http header
FfHUCisI2 天前
Golang HTTP 路由设计与请求处理
开发语言·http·golang
小新讲网安2 天前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
wear工程师2 天前
接口超时别只调大 timeout:Java HTTP 客户端其实有 3 段等待
java·http
蜡台2 天前
本机 局域网 搭建本地 HTTPS 域名完整方案
网络协议·http·https·openssl
ControlRookie3 天前
第13篇_Client 02|TCP 连接成功,为什么 HTTP 请求还没有成功
http·codesys·plc通信·controlrookie
IPdodo跨境网络4 天前
HTTP 与 SOCKS5 代理到底差在哪?用 Node.js 跑一次连接链路对比
http
小小龙学IT4 天前
gRPC 开源高性能 RPC 框架深度解析:从 HTTP/2 到跨语言微服务实战
http·rpc·开源