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.pswp.cn/web/92975.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录RK3588的docker中启动rviz2报错

安装好rk3588 的docker,pull了ros的完整镜像后,想要启动rviz但是报错,下面是我的踩坑记录 0.原始的启动镜像的脚本: sudo docker run -it --rm --privileged --nethost -e DISPLAY$DISPLAY --namemy_image_name \-e DISPLAY$DIS…

ThingJS 新手学习技巧

一、ThingJS 基础认知 1.1 ThingJS 是什么 ThingJS 是一款基于 WebGL 技术的 3D 可视化开发平台,它为开发者提供了简单易用的 API 和丰富的 3D 场景组件,让开发者能够快速构建出高质量的 3D 可视化应用。无论是智慧园区、智慧楼宇、智慧交通还是工业监…

【软考架构】需求工程中,系统分析与设计的结构化方法

结构化方法诞生于20世纪70年代,是为了应对当时日益复杂的软件系统开发挑战(如“软件危机”)而提出的。它强调系统性、规范性、分解和抽象,目标是提高软件开发的效率、质量和可维护性,降低复杂性。 核心思想&#xff1a…

FPGA常用资源之IO概述

目录 一、前言 二、I/O资源 2.1 I/O端口资源 2.1.1 IOB 2.1.2 ILOGIC/OLOGIC 2.2 ZHOLD 2.3 IDDR/ODDR 2.4 IDELAY 2.5 ISERDES/OSERDES 2.6 IO Logic Resource连接 2.7 Device示意图 三、工程示例 3.1 工程代码 3.2 Device结果 一、前言 FPGA芯片从内部结构看主…

密集遮挡场景识别率↑31%!陌讯轻量化部署方案在智慧零售的实战解析

一、零售业痛点:当技术遇上客流洪流据《2024智慧零售技术白皮书》统计,高峰期超市顾客密度超3人/㎡时,​​目标漏检率高达48%​​。核心挑战包括:​​动态遮挡​​:购物车/货架造成的持续性目标截断​​计算瓶颈​​&a…

力扣(O(1) 时间插入、删除和获取随机元素)

一、题目分析(一)功能需求 我们需要实现 RandomizedSet 类,包含以下功能: RandomizedSet():初始化数据结构。bool insert(int val):当元素 val 不存在时,插入该元素并返回 true;若已…

前端开发的面试自我介绍与准备

前端面试自我介绍不知道怎么说的,直接参考下面的模板,然后换成你的经历 自我介绍控制在1分钟左右,千万不要说的太久,面试官会烦的,但是又不好意思打断你 切记面试是人和人面对面的交流,要有,面试…

10、系统规划与分析

一、系统规划步骤系统规划步骤对现有系统进行初步调查分析和确定系统目标分析子系统的组成和基本功能拟定系统的实施方案拟定系统的可行性研究指定系统建设方案系统规划阶段的产出物:可行性研究报告、系统设计任务书。习题1、拟定系统的实施方案是在系统规划阶段完成…

Nginx学习笔记(六)—— Nginx反向代理

📚Nginx学习笔记(六)—— Nginx反向代理 📌 一、反向代理核心概念 本质原理: #mermaid-svg-UkFRDp2Ut7MK5T2N {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

三伍微电子GSR2406 IoT FEM 2.4G PA 射频前端模组芯片

三伍微电子GSR2406 IoT FEM 2.4G PA 射频前端模组芯片规格书Product Description The GSR2406 is a high-performance, fully integrated RF front-end module (FEM) designed for Zigbee technology, Thread, and Bluetooth (including low energy) applications. The GSR2406…

开发避坑指南(24):RocketMQ磁盘空间告急异常处理,CODE 14 “service not available“解决方案

异常信息 Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.94 CQ: 0.94 INDEX: 0.94, maybe your broker machine memory too small.异常背景 一个项目里面用到了rocketmq&#x…

开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界

文章目录前言【视频教程】1.安装Docker2.本地部署SafeLine3.使用SafeLine4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Uptime Kuma公网地址前言 当个人或企业站点上线后面临的首要威胁往往来自网络攻击——据统计,超过60%的Web应用漏洞利用尝试在流量到达…

Mac M1探索AnythingLLM+SearXNG

SearXNG 能聚合来自多达 200 多个搜索服务,可私有化部署,并提供了灵活自定义选项。 AnythingLLMSearXNG,刚好能解决AnythingLLM因为网络限制导致web search不可用的问题。 1 安装docker 下载mac m1版本的docker并安装。 https://docs.dock…

模式设计:策略模式及其应用场景

简介 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态选择算法或行为。核心思想是将算法封装成独立的类(策略),使它们可以相互替换,让算法的变化独立于使用它的客户端。 核心思想 解耦:将算法的定义与使用分离。每个算法封装起来,使它们可以互…

Squash Merge(压缩合并)和Rebase Merge(变基合并)介绍

文章目录**1. Squash Merge(压缩合并)****定义****操作步骤****特点****优点****缺点****2. Rebase Merge(变基合并)****定义****操作步骤****特点****优点****缺点****3. 对比总结****4. 选择建议****5. 示例场景****Squash Merg…

Linux编程 —— framebuffer

一、framebuffer概念framebuffer:帧缓冲,帧缓存技术Linux内核专门为图形化显示提供的一套应用程序接口。二、基本操作步骤1. 打开显示设备(/dev/fb0) 2. 获取显示设备相关参数(分辨率,像素格式)---》ioctl 3. 建立显存…

文件编辑html

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件行内容编辑器</title><script src&…

具有熔断能力和活性探测的服务负载均衡解决方案

一、整体架构设计 1.核心组件 负载均衡器&#xff1a;负责选择可用的服务节点健康检查器&#xff1a;定期检测服务节点的可用性服务节点管理&#xff1a;维护所有可用节点的状态信息 2.负载均衡策略 轮询(Round Robin)随机(Random)加权轮询(Weighted Round Robin)最少连接(Leas…

技术演进中的开发沉思-62 DELPHI VCL系列:VCL下的设计模式

今天聊聊设计模式&#xff0c;当然这个章节目前仅限于DELPHI VCL,因为接下来梳理的Factory/Factory Method、Bootstrap 和 ForEach 这三种设计样例&#xff0c;看似独立&#xff0c;却在实际开发中相互配合&#xff0c;共同构建起高效、灵活的程序架构。在 DELPHI VCL 开发的技…

Docker 101:面向初学者的综合教程

掌握 Docker 已成为软件开发中的一项关键技能。本教程探讨了容器化的世界&#xff0c;包括其核心概念、优缺点&#xff0c;以及开始使用容器化的分步指南。 无论是 Docker 的新手&#xff0c;还是希望复习基础知识的更有经验的开发人员&#xff0c;本指南都能满足需求。 什么…