当前位置: 首页 > news >正文

Java学习第一百二十一部分——HTTP

目录

一、前言简介

二、核心特性

三、通信基础结构

四、关键组件详解

五、性能演进——版本对比

六、开发者建议  

七、总结归纳


一、前言简介

       HTTP(“H”yper“t”ext “T”ransfer “P”rotocol,超文本传输协议)是互联网上应用最广泛的应用层协议,用于在客户端(如浏览器)和服务器之间传输超文本(如网页)及其他资源。

二、核心特性

1. 无状态协议 (Stateless) 

  • 每个请求独立处理,服务器不保存客户端之前的请求状态。  

  • 解决方案:使用 Cookies、Session 或 Token 维持会话状态(如登录态)。

2. 请求-响应模型 (Request-Response) 

  • 客户端发起请求 → 服务器返回响应(含状态码、头、数据)。

3. 基于文本的协议 (早期)

  • HTTP/1.x 使用明文传输请求头和数据(可读性强,但效率低)。  

  • HTTP/2+ 改用二进制分帧提升性能。

4. 可扩展性  

  • 支持自定义请求头(如 `Authorization: Bearer token`)和响应头。

三、通信基础结构

[客户端 Client]------>发送HTTP请求------>[服务器 Server]

[服务器 Server]------>返回HTTP响应------>[客户端 Client]

请求组成:

  • 请求行(方法 + URL + HTTP版本,如 `GET /index.html HTTP/1.1`)  

  • 请求头(元数据,如 `User-Agent`, `Accept-Language`)  

  • 请求体(可选,如 POST 提交的表单数据)

响应组成:

  • 状态行(版本 + 状态码 + 描述,如 `HTTP/1.1 200 OK`)  

  • 响应头(元数据,如 `Content-Type: text/html`)  

  • 响应体(资源数据,如 HTML 内容)

四、关键组件详解

1. URL(统一资源定位符) 

  • 格式:`https://www.example.com:443/path?query=value#fragment`  

  • 组成:协议 `https` + 域名 `www.example.com` + 端口 `443` + 路径 `/path` + 查询参数 `?query=value` + 锚点 `#fragment`

2. HTTP 主要方法(Methods)

GET

  • 语义:请求指定资源的表示。只应用于获取数据,不应产生副作用。

  • 特点:安全、幂等。数据通过URL查询字符串传递。

  • 示例:获取网页、图片、API数据。

POST

  • 语义:向指定资源提交数据(通常会导致服务器端状态变化或产生副作用,如创建新资源)。

  • 特点:不安全、不幂等。数据通常放在请求体中。

  • 示例:提交表单、上传文件、创建订单。

PUT

  • 语义:替换目标资源的所有当前表示(完整更新)。如果资源不存在,可能由服务器创建(需约定)。

  • 特点:不安全、幂等。数据放在请求体中。

  • 示例:更新用户个人资料(全部字段)。

DELETE

  • 语义:删除指定的资源。

  • 特点:不安全、幂等。

  • 示例:删除一篇文章、一个用户。

PATCH

  • 语义:对资源应用部分修改。

  • 特点:不安全、不幂等(取决于修改类型,但通常视为不幂等)。数据(描述如何修改)放在请求体中。

  • 示例:更新用户邮箱(只需发送邮箱字段)。

HEAD

  • 语义:与GET相同,但服务器只返回响应头,不返回响应体。

  • 特点:安全、幂等。用于获取资源的元信息(如检查资源是否存在、检查修改时间Last-Modified/ETag用于缓存)。

  • 示例:检查链接有效性、获取文件大小但不下载。

OPTIONS

  • 语义:获取目标资源支持的通信选项(允许的方法等)。

  • 特点:安全、幂等。常用于CORS预检请求。

  • 示例:浏览器在发送跨域PUT请求前,先发OPTIONS请求询问服务器是否允许。

CONNECT

  • 语义:建立到目标资源标识的服务器的隧道(通常用于通过代理建立SSL/TLS连接)。

  • 特点:特殊用途。

  • 示例:通过代理建立HTTPS连接。

TRACE

  • 语义:沿着到目标资源的路径执行一个消息环回测试(主要用于诊断)。

  • 特点:安全、幂等。出于安全考虑,现代浏览器通常禁用。

  • 示例:调试网络请求路径。

📌 方法关键特性总结

HTTP 方法安全方法 (Safe)幂等方法 (Idempotent)常用方法 (Common)通常有请求体 (Request Body)CORS 相关角色 (CORS Role)
GET✅ 是✅ 是✅ 是❌ 否简单请求 / 触发预检
HEAD✅ 是✅ 是⭕ 有时❌ 否简单请求 / 触发预检
POST❌ 否❌ 否✅ 是✅ 是非简单请求 / 触发预检
PUT❌ 否✅ 是✅ 是✅ 是非简单请求 / 触发预检
PATCH❌ 否❌ 通常不是✅ 是✅ 是非简单请求 / 触发预检
DELETE❌ 否✅ 是✅ 是❌ 通常没有非简单请求 / 触发预检
OPTIONS✅ 是✅ 是⭕ 有时❌ 通常没有在预检请求中至关重要
TRACE✅ 是✅ 是❌ 否❌ 否简单请求 / 触发预检
  • 安全方法 (Safe): 指不会修改服务器状态的方法。

  • 幂等方法 (Idempotent): 指执行一次与执行多次效果相同的方法(服务器状态最终一致)。

  • 常用方法 (Common): 指在构建 RESTful API 或常规 Web 开发中最常使用的方法。

  • 通常有请求体 (Request Body): 指该方法在请求中通常会携带数据负载(请求体)

  • CORS 相关角色 (CORS Role):OPTIONS: 在 CORS 机制中扮演核心角色。浏览器在发送可能产生副作用的跨域请求前,会自动发送一个 OPTIONS 请求(预检请求)到目标服务器,以询问实际请求(POSTPUTDELETEPATCH 等)是否被允许。服务器通过 OPTIONS 响应的 CORS 头来告知浏览器后续请求能否继续。

3. 状态码(Status Codes)  

`1xx`:信息性状态 

`2xx`:成功  

  • `200 OK`:请求成功  

  • `201 Created`:资源已创建(配合 POST/PUT)  

`3xx`:重定向  

  • `301 Moved Permanently`:永久重定向  

  • `302 Found`:临时重定向  

`4xx`:客户端错误  

  • `400 Bad Request`:请求语法错误  

  • `401 Unauthorized`:未认证  

  • `403 Forbidden`:无权限  

  • `404 Not Found`:资源不存在  

`5xx`:服务器错误  

  • `500 Internal Server Error`:服务器内部错误  

  • `503 Service Unavailable`:服务不可用  

4. 头部字段(Headers)

常用请求头:  

  • `Host: example.com`:目标域名(HTTP/1.1 必需)  

  • `User-Agent`: 客户端标识 

  • `Cookie: name=value`:发送 cookies  

  • `Authorization: Bearer xxxx`:身份凭证  

常用响应头:  

  • `Set-Cookie: name=value`:设置 cookies  

  • `Content-Type: text/html; charset=utf-8`:响应数据类型  

  • `Cache-Control: max-age=3600`:缓存控制  

五、性能演进——版本对比

特性HTTP/0.9 (1991)HTTP/1.0 (1996 - RFC 1945)HTTP/1.1 (1997/1999 - RFC 2068/2616)HTTP/2 (2015 - RFC 7540)HTTP/3 (2022 - RFC 9114)
核心模型单请求单响应,无头单请求单响应持久连接,管道化(理论)多路复用,二进制帧基于QUIC的多路复用
连接方式每个请求后关闭TCP连接默认关闭连接 (Connection: close)默认持久连接 (Connection: keep-alive)单一持久TCP连接基于UDP的QUIC连接
头部传输无头部纯文本头部纯文本头部 (可能重复、冗长)HPACK头部压缩QPACK头部压缩
数据传输仅响应体(无格式信息)响应体响应体,分块传输(Transfer-Encoding: chunked)二进制分帧二进制分帧
服务器推送❌ 不支持❌ 不支持❌ 不支持✅ 支持 (主动推送资源)✅ 支持
请求优先级❌ 不支持❌ 不支持❌ 不支持✅ 支持✅ 支持
队头阻塞问题严重 (每个请求新连接)严重 (每个请求新连接)TCP层HOL阻塞 (管道化难实现)流级别HOL阻塞 (TCP层仍存在)✅ 基本消除 (QUIC流独立)
主要优势极简引入了元数据(头)性能提升(持久连接),缓存、Host头等性能飞跃(多路复用、头部压缩、推送)极致性能(消除TCP HOLB),更快连接建立
主要劣势功能极其有限连接开销巨大HOL阻塞限制性能TCP层仍存在HOL阻塞部署复杂度高,UDP可能被网络设备限制
当前状态完全废弃基本废弃广泛使用(尤其老系统/简单场景)主流版本快速增长

> HTTP/3 核心优势:  

> 解决 TCP 队头阻塞,抗丢包能力更强  

> 0-RTT/1-RTT 快速连接(尤其弱网环境)  

> 连接迁移(切换网络 IP 不断连)

六、开发者建议  

  • 新项目优先启用 HTTP/2/3 + HTTPS

  • API 设计严格遵循方法语义(如 `GET` 只读、`PUT` 幂等)  

  • 利用缓存头(`Cache-Control`, `ETag`)优化性能

七、总结归纳

  • 基础角色:Web 通信的基石,定义客户端与服务器的交互规则。  

  • 核心痛点解决:

      - 无状态 → 通过 Cookie/Session 管理状态  

      - 性能瓶颈 → HTTP/2 多路复用、HTTP/3 QUIC 协议  

      - 安全性 → HTTPS 加密传输                                                                                                                  

  • 应用场景:网页浏览、API 交互(RESTful)、文件传输、实时通信(WebSocket 基于 HTTP 升级)等。  

http://www.dtcms.com/a/324019.html

相关文章:

  • 超越基础!一文掌握CNN/Transformer/MoE架构,实战多模态AI(第三章)
  • 《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》
  • NLP 2025全景指南:从分词到128专家MoE模型,手撕BERT情感分析实战(第四章)
  • FlinkSQL Joins全解析
  • Spring基于XML的自动装配
  • 低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题
  • IntelliJ IDEA 2025.2 重磅发布
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2025年1月12日真题
  • 机器学习——TF-IDF 衡量词语在文档中重要程度
  • 【代码随想录day 15】 力扣 257. 二叉树的所有路径
  • LeetCode 括号生成
  • Jmeter性能测试之检测服务器CPU/Memory/磁盘IO/网络IO
  • 服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?
  • 【Qt】QCustomPlot 简易配置教程
  • XML 指南
  • Redis一站式指南一:从MySQL事务到Redis持久化及事务实现
  • Baumer高防护相机如何通过YoloV8深度学习模型实现道路水坑的检测识别(C#代码UI界面版)
  • git merge和git rebase的区别
  • 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕增加利用 Whisper 分段信息,全新 Prompt功能
  • Unity 遮挡显示效果 Shader
  • 计算机网络:超网即路由聚合一定需要连续的IP地址吗?
  • LeetCode 刷题【37. 解数独】
  • 企业级WEB应用服务器TOMCAT — WEB技术详细部署
  • 全栈:如果SSM项目里的数据库是mysql而自己使用的是SQLserver应该替换哪些文件?
  • 数学建模:控制预测类问题
  • UE什么贴图要关闭SRGB
  • LLM attention 变体
  • 基于FFmpeg的B站视频下载处理
  • 组合数学覆盖设计阶段成果:C(12,4)的5组四元组覆盖C(12,3)所有三元组
  • 我如何从安全运维逆袭成企业CSO