网络(六)|应用层 HTTP&HTTPS:URL、请求响应、Cookie 与证书

HTTP/HTTPS

前言

上一篇传输层讲完 TCP&UDP、三次握手四次挥手。本篇落到应用层,讲解浏览器和服务器的通信协议 HTTP / HTTPS。

传输层TCP、UDP完成了主机上进程与进程的数据传输。但浏览器、后端服务之间,需要一套统一的格式约定:请求长什么样、响应长什么样、要携带哪些附加信息,这就是HTTP协议。

HTTP是基于TCP的应用层协议,明文传输;HTTPS则是在HTTP基础上引入加密,解决窃听、篡改、中间人劫持问题。

本篇覆盖:报文格式、URL、请求方法GET/POST、请求头响应头、Cookie、状态码、HTTPS加密原理、证书。

HTTP基础概念

  1. HTTP:超文本传输协议,应用层协议,默认基于 TCP。
  2. 版本演进:
    (1)HTTP/1.0:每次请求新建 TCP 连接,请求完断开;
    (2)HTTP/1.1:长连接(默认),管线化,面试最常考;
    (3)HTTP/2:二进制帧、多路复用。
  3. 工作模式:一问一答,客户端发起请求,服务器返回响应。
  4. 抓包工具:Fiddler / Wireshark
    (1)Fiddler:代理抓 HTTP/HTTPS,观察请求响应报文
    (2)Wireshark:抓取底层 TCP/IP 数据包

URL

URL:唯一资源定位符,描述了一个资源在网络上的位置。

协议方案名://主机:端口/资源路径?query参数#片段

例如 http://blog.test.com:8080/network/article?chapter=6\&keyword=http#summary

  1. 协议方案名:http/https
  2. 主机+端口:定位服务器程序(哪个主机上的哪个程序)
  3. 资源路径:描述了要访问服务器的哪个资源
  4. query 查询字符串:key=value&key=value,键值对结构的数据,以?开头。是针对此次请求进行了补充说明。
  5. URL编码:中文、特殊符号要做urlencode,否则浏览器可能会解析失败,导致请求无法正常进行。

HTTP报文结构

请求报文

  1. 首行

    首行包含三部分信息:请求方法、URL、HTTP版本号,中间用空格分隔。

    例如:GET /index.html HTTP/1.1

  2. 请求头header

    一组key: value键值对,注意键和值之间用:+空格来分隔,每个键值对单独占一行。

    常见请求头:

    (1)Host:目标主机端口

    (2)User‑Agent:客户端浏览器 / 设备信息

    (3)Referer:从哪个页面跳转过来

    (4)Content‑Length:body 长度

    (5)Content‑Type:请求 body 的数据格式

  3. 空行

    请求头的结束标记,分割头部和正文。

  4. 正文body

    POST/PUT携带数据;GET一般没有body。

GET vs POST

GET和POST没有本质区别,双方可以替换对方的场景。

但在使用习惯上有差异:

  1. GET经常把传递给服务器的数据放到query string中;POST则经常放到body中。
    但上述情况并非绝对,GET也可以用body,POST也可以用query string,使用的前提是客户端/服务器都要按照一样的方式处理代码。
  2. 语义上有差异,GET大多数用来获取数据,POST大多数用来提交数据。

响应报文

  1. 首行
    包含HTTP版本+状态码+状态码描述,中间用空格分隔。
    状态码描述了请求的结果。
    例如:HTTP/1.1 200 OK
  2. 响应头 header
    键值对,返回服务器附加信息。
  3. 空行
    响应头的结束标记。
  4. 正文body
    返回给浏览器的数据 (html、json、图片等)

常见请求头&响应头重点

  1. User‑Agent:浏览器+操作系统的属性(版本)。以前用来区分新旧浏览器,现在用来区分PC端还是移动端。
  2. Referer:来源页面。
  3. Content‑Type:body 格式:application/json、text/html、form‑data等
  4. Content‑Length:body 字节长度
  5. Cookie
    Cookie 由服务器下发,保存在浏览器本地;后续每次请求自动携带 Cookie 发给服务器。
    作用:会话保持,记住用户状态。
    服务器通过响应头Set‑Cookie设置;浏览器请求头携带Cookie。

HTTP状态码

  1. 2xx 成功
    200 OK:正常成功返回
  2. 3xx 重定向
    301 永久重定向会被浏览器缓存;302 临时重定向不会缓存;响应头Location给出跳转地址
  3. 4xx 客户端错误
    400 参数错误;404 资源找不到;403 权限不足拒绝访问
  4. 5xx 服务端错误
    500 服务器内部异常;503 服务不可用

HTTPS

HTTP 是明文传输,存在窃听、篡改、中间人攻击风险;HTTPS = HTTP + TLS 加密。

两种加密方式

  1. 对称加密

同一个密钥,加密解密都用它。速度快,但是密钥传输容易泄露。

  1. 非对称加密

公钥加密、私钥解密。公钥公开,私钥服务器自己保存。加密解密速度慢。

中间人攻击问题

如果只用非对称加密传输对称密钥:客户端拿到的公钥有可能是黑客伪造的,无法辨别公钥真假。

数字证书CA机构

解决公钥真伪问题。

  1. 服务器向 CA 申请证书,证书包含服务器公钥、域名信息,CA 数字签名。
  2. 客户端拿到证书,用 CA 根证书校验签名,确认公钥是真实服务器的,不是黑客伪造。

HTTPS握手简单流程

  1. 客户端请求服务器,服务器返回 CA 数字证书。
  2. 客户端校验证书合法无误,取出服务器真实公钥。
  3. 客户端生成随机对称密钥,使用服务器公钥加密,发给服务器。
  4. 服务器用自己私钥解密,拿到对称密钥。
  5. 后续所有 HTTP 数据,全部使用这套对称密钥加密通信。

非对称加密只用来安全传递对称密钥;真正业务数据传输使用对称加密兼顾安全与性能。

总结

  1. HTTP 作为应用层协议,定义了客户端与服务器之间请求响应的格式规范。
  2. GET/POST、请求响应头、Cookie、状态码是日常开发和面试高频。
  3. HTTP 明文不安全,HTTPS 结合对称加密、非对称加密、CA 数字证书,解决窃听篡改中间人劫持。
  4. 传输层 TCP 保证可靠传输,HTTP 约定数据语义,HTTPS 负责数据加密,三者配合完成网页、接口的网络通信。
    本篇是「Java后端编程系列」的连载内容,点击链接查看完整系列:

🔹 上一篇:网络(五)|别再死背三次握手!一文吃透 TCP 全底层原理

👉 点击直达 Java后端基础专栏合集

相关推荐
豆豆3 小时前
2026 年建站架构选型实录:从 SC-081v3 证书新政与备案新规倒推 CMS 选型口径
架构·https·cms·geo·acme·web架构·pageadmin
life码农6 小时前
Nginx 配置允许指定 IP 段访问:从 192.168.1.1 到 192.168.1.124 及 /24 详解
网络·tcp/ip·nginx
javaDocker6 小时前
16.5 小时,我打掉了两只「SSL 握手失败」的怪
网络·网络协议·ssl
蜗牛互联网7 小时前
Python接入Gemini 3.8 Flash实现票据视觉抽取与规则校验
java·javascript·网络·人工智能·python
我就是不信7 小时前
TCP 原理详解:从三次握手到拥塞控制
网络·网络协议·tcp/ip
木白CPP7 小时前
USB(一): USB 概述&&介绍
linux·网络·嵌入式硬件
可乐鸡翅yeah_7 小时前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
HEJOO98 小时前
指针与结构体:C 语言进阶核心详解
c语言·开发语言·网络
en.en..8 小时前
IO 多路复用:select、poll、epoll 核心函数解析
网络
我就是不信8 小时前
TCP/IP 网络编程:从入门到实战
网络·网络协议·tcp/ip