news 2026/1/11 21:17:29

第1章:JavaWeb基础概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第1章:JavaWeb基础概念

什么是JavaWeb?架构之间有哪些区别?

Java Web 定义:

  • JavaWeb是基于Java技术栈开发的Web应用的总称;
  • Web(World Wide Web,中文为万维网)是一种基于互联网的信息服务系统;
  • 核心是通过浏览器访问全球各地服务器上的资源;
  • 我们日常用浏览器刷网页,看新闻,在线工具都是用的web服务器;
  • 本质是java技术与web架构的结合,是企业级web应用开发的主流方向之一;
  • SpringMVC是基于Javaweb实现的。

对比维度

C/S 架构(客户端 / 服务器)

B/S 架构(浏览器 / 服务器)

客户端形式

专用软件(需安装,适配特定系统)

通用浏览器(无需安装,跨设备兼容)

开发维护成本

高(多平台开发,客户端逐个升级)

低(仅维护服务器,升级同步所有用户)

响应速度

快(本地处理部分逻辑,减少网络传输)

较慢(依赖网络与服务器,高并发易卡顿)

跨平台能力

差(不同系统需单独开发客户端)

好(支持所有带浏览器的设备)

典型应用

游戏客户端、专业工具(如 Photoshop)

电商网站、在线文档、政务平台

用户使用门槛

高(需安装,对设备配置有要求)

低(输入 URL 即可访问,低配置设备可用)

Web工作的原理

第1步:用户发起请求(输入URL):在浏览器输入访问地址

  • 浏览器解析URL核心信息,协议,域名,资源路径。

第2步:域名解析(将域名转为IP地址):依赖DNS(域名系统)

  • 优先查询浏览器本地DNS缓存;
  • 如果本地没有缓存,查询路由器DNS缓存;
  • 仍无结果则向运营商DNS服务器发起查询;
  • 运营商DNS服务器向DNS服务器查询;

第3步:建立TPC连接:通过TPC协议建立可靠网络连接(三次握手🤝

  • 客户端(浏览器)向服务器发生"请求连接"数据包;
  • 服务器接受后,返回"同意连接"数据包;
  • 客户端确认收到响应,发送"连接确认"数据包,TCP连接正式建立;

第4步:发送HTTP请求

  • 请求内容组成:
    • 请求方法:GET(获取首页 HTML 等资源)、POST(提交登录表单等数据);
    • 请求头:包含浏览器信息(如 Chrome 版本)、Cookie(登录状态)、期望响应格式(如 HTML、JSON);
    • 请求体:仅 POST 请求包含(如加密后的用户名、密码)。
  • HTTP定义
    • HTTP(HyperText Transfer Protocol,超文本传输协议)是应用层的核心协议
    • 用于客户端(如浏览器、Postman)与服务器之间传输超文本数据(HTML、图片、视频、JSON 等)
    • 是万维网(WWW)服务的基础。
    • 浏览器与服务器的通信全依赖 HTTP 协议
    • 它定义了 “请求该发什么”“响应该怎么回” 的规则。

第5步:服务器处理请求并返回响应

  • 服务器协同处理流程:
    • 应用服务器(如 Nginx)解析请求(识别需返回首页资源);
    • 若需数据支撑(如首页推荐内容),应用服务器向数据库服务器发起查询;
    • 数据库服务器返回数据(如推荐新闻、图片链接);
    • 应用服务器生成响应内容(HTML 代码、CSS 样式、JS 脚本),经 HTTPS 加密后返回浏览器;
  • 响应内容组成:
    • 响应状态码:200(成功)、404(资源不存在)、500(服务器错误)等;
    • 响应头:包含服务器信息(如 Nginx 版本)、数据类型(text/html表示 HTML 页面)、缓存规则;
    • 响应体:核心资源(HTML 代码、图片二进制数据等)。

第6步:关闭TCP连接:浏览器没有请求其他资源,会发生四次挥手

  • 客户端发生"关闭连接"请求;
  • 服务器放回"准备关闭"响应,等待剩余数据传输;
  • 服务器确认无剩余数据,发生"关闭连接"请求;
  • 客户端返回"确认关闭"响应。TCP连接正式关闭;

第7步:浏览器解析并渲染页面

  • 解析 HTML:生成 DOM 树(描述页面结构,如标题、按钮位置);
  • 解析 CSS:生成 CSSOM 树(定义页面样式,如字体大小、颜色);
  • 结合 DOM 树与 CSSOM 树,生成渲染树(仅包含需显示的元素及样式);
  • 布局(Layout):计算渲染树中元素的位置和大小;
  • 绘制(Paint):根据布局结果将元素绘制到浏览器窗口(填充颜色、渲染图片);
  • 执行 JavaScript:运行页面 JS 脚本(如搜索框自动补全功能),动态修改页面内容(更新 DOM 树、发送异步请求)。

HTTP和HTTPS核心区别

HTTP 的明文传输存在 “窃听、篡改、伪造” 风险,HTTPS 通过 “TLS/SSL 加密” 解决此问题,两者核心区别如下:

对比维度

HTTP

HTTPS

默认端口

80

443

数据传输

明文(可被抓包工具直接查看)

TLS/SSL 加密(抓包仅见密文)

安全性

低(无加密、无身份验证)

高(加密 + 服务器身份验证,需 CA 证书)

性能开销

无加密 / 解密开销,速度快

需 TLS 握手、加密 / 解密,性能略低(可优化)

证书要求

无需证书

需 CA 机构颁发的 SSL 证书(免费 / 付费)

适用场景

非敏感数据(如静态文档、内部系统)

敏感数据(如登录、支付、电商、个人信息)

HTTP消息结构-请求

什么是http消息结构?

  • HTTP 消息是客户端与服务器通信的 “数据载体”
  • 遵循“起始行 + 头部字段 + 空行 + 消息体”的格式(空行是必需的,用于分隔头部和消息体)

请求报文结构

  • 请求报文由客户端发送给服务器,格式如下:
    • 请求行(必需):定义请求方法、目标资源、HTTP版本
    • 请求头(可选):描述请求的元数据(键值对形式)
    • 空行(必需):标识请求头结束
    • 请求体(可选):携带请求数据(如表单、JSON,但get方法不推荐携带请求体,却没有严格禁止)

请求行详解

  • 格式:请求方法 + 请求URI + HTTP版本
  • 请求方法:定义对资源的操作(如 GET = 查询、POST = 提交);
  • 请求 URI:目标资源路径(如/api/user/index.html);
  • HTTP 版本:如HTTP/1.1(最常用)、HTTP/2、HTTP/3。
  • 示例:
GET /user?page=1&size=10 HTTP/1.1 # GET请求:查询第1页用户,每页10条 POST /api/login HTTP/1.1 # POST请求:提交登录数据
  • 使用浏览器开发者工具查看结构信息

常见请求头(核心元数据)

请求头字段

作用说明

示例

Host

服务器域名 + 端口(HTTP/1.1 必需,区分虚拟主机)

Host: example.com:8080

User-Agent

客户端身份(浏览器 / 设备信息,用于服务器适配)

User-Agent: Mozilla/5.0 (Windows NT 10.0; ...)

Accept

客户端可接受的响应数据类型

Accept: text/html, application/json

Content-Type

请求体的数据类型(POST/PUT 时必需)

Content-Type: application/json

Content-Length

请求体的字节长度(帮助服务器接收完整数据)

Content-Length: 56

Cookie

客户端存储的 Cookie(用于会话管理)

Cookie: sessionId=abc123; username=test

Connection

是否复用 TCP 连接(HTTP/1.1 默认keep-alive

Connection: keep-alive

请求体示例(POST/PUT 方法)

  • 表单数据格式(
Content-Type: application/x-www-form-urlencoded

):text

username=admin&password=123456&remember=true
  • JSON 格式(
Content-Type: application/json

):json

{ "username": "admin", "password": "123456", "remember": true }

HTTP消息结构-响应

响应报文结构

  • 响应报文由服务器返回给客户端,格式如下:text
    • 响应行(必需):定义HTTP版本、状态码、原因短语
    • 响应头(可选):描述响应的元数据(键值对形式)
    • 空行(必需):标识响应头结束
    • 响应体(可选):服务器返回的实际数据(如HTML、JSON)

响应行详解

  • 格式:HTTP版本 + 状态码 + 原因短语
  • 状态码:3 位数字,标识请求处理结果(如 200 = 成功、404 = 资源不存在);
  • 原因短语:状态码的文字描述(仅辅助理解,程序不依赖)。
  • 示例:text
HTTP/1.1 200 OK # 请求成功 HTTP/1.1 404 Not Found # 资源不存在 HTTP/1.1 500 Internal Server Error # 服务器内部错误

常见响应头(核心元数据)

响应头字段

作用说明

示例

Content-Type

响应体的数据类型 + 编码(客户端解析依据)

Content-Type: text/html; charset=UTF-8

Content-Length

响应体的字节长度

Content-Length: 2048

Server

服务器软件信息(如 Web 服务器类型)

Server: Nginx/1.21.0

Set-Cookie

服务器向客户端写入 Cookie(会话管理)

Set-Cookie: sessionId=xyz789; Max-Age=3600

Location

重定向的目标 URL(配合 3xx 状态码使用)

Location: /login

Cache-Control

缓存控制策略(如缓存有效期)

Cache-Control: max-age=86400

Retry-After

服务不可用时,建议重试的时间(秒,配合 503)

Retry-After: 3600

响应体示例

  • HTML 格式(
Content-Type: text/html

):html

<!DOCTYPE html> <html> <head> <title>首页</title> </head> <body> <h1>欢迎访问HTTP协议讲解页面!</h1> <p>当前时间:2024-01-01 12:00:00</p> </body> </html>
  • JSON 格式(
Content-Type: application/json

):json

{ "code": 200, "message": "请求成功", "data": { "username": "admin", "role": "admin", "createTime": "2024-01-01" } }

HTTP请求方法

HTTP 请求方法定义

  • HTTP 请求方法是客户端(如浏览器、APP、接口调用工具)向服务器发送请求时,声明 “请求目的” 的标准化指令
  • 它定义了客户端希望服务器对目标资源执行的操作(如 “获取资源”“提交数据”“更新信息”)。
  • 作为 HTTP 协议的核心组成部分,请求方法的设计遵循 “语义化” 原则
    • 不同方法对应明确的操作含义,确保客户端与服务器之间的沟通统一、无歧义
    • 同时也影响服务器的处理逻辑(如缓存策略、数据修改权限)。

核心方法如下:

请求方法

核心语义

关键特点

典型应用场景

GET

查询资源

1. 请求参数在 URL 中(可见);2. 无请求体;3. 幂等;4. 有 URL 长度限制(约 2KB)

访问页面、查询列表(如/user?page=1

POST

提交资源(创建)

1. 请求参数在请求体中(不可见);2. 非幂等;3. 无长度限制

表单提交、用户注册、登录

PUT

全量更新资源

1. 需提供资源的完整信息;2. 幂等;3. 覆盖式更新

全量修改用户信息(如PUT /user/1

DELETE

删除资源

1. 无请求体(或仅传辅助参数);2. 幂等

删除用户(DELETE /user/1

)、删除文章

PATCH

部分更新资源

1. 仅需提供需修改的字段;2. 幂等

仅更新用户手机号(PATCH /user/1

HEAD

获取资源头部

与 GET 一致,但无响应体(仅返回头信息)

检查资源是否存在、获取缓存信息

关键概念:幂等性

  • 指 “多次执行相同请求,结果完全一致(无副作用)”。例如:GET 查询 100 次,结果相同;DELETE 删除 100 次,第一次删完后,后续 99 次仍返回 “删除成功”(无额外副作用)。

重点:GET 与 POST 的核心区别

对比维度

GET

POST

数据位置

URL 参数(?key=value

请求体(Form/JSON)

安全性

明文传输(不安全,易被抓包)

数据在请求体(相对安全,需配合 HTTPS)

幂等性

幂等(适合查询)

非幂等(适合提交)

缓存支持

浏览器默认缓存(可通过头控制)

默认不缓存

长度限制

受 URL 长度限制(约 2KB)

无限制

HTTP状态码

什么是HTTP状态码?

  • HTTP 状态码(HTTP Status Code)是服务器对客户端(如浏览器、APP)发送的 HTTP 请求的响应状态标识
  • 由 3 位数字组成(范围 100-599)
  • 它的核心作用是:让客户端快速判断请求的处理结果(成功、失败、需要进一步操作等)
  • 无需解析响应体内容即可了解基本状态,同时为问题排查(如 “为什么页面打不开”“为什么登录失败”)提供明确方向。

HTTP 状态码分为 5 大类,每类代表不同的 “请求处理状态”,开发中需重点掌握常用状态码:

状态码分类

核心含义

常用状态码及说明

1xx

信息性(临时响应)

100 Continue:服务器已接收请求头,客户端可继续发送请求体(多用于大文件 POST)

2xx

成功

200 OK:请求成功(最常用);201 Created:资源创建成功(如 POST 新增用户);204 No Content:请求成功但无响应体(如 DELETE)

3xx

重定向(需额外操作)

301 Moved Permanently:永久重定向(如域名变更);302 Found:临时重定向(如未登录跳登录页);304 Not Modified:资源未修改,使用本地缓存

4xx

客户端错误

400 Bad Request:请求语法错误(如 JSON 格式错);401 Unauthorized:未认证(未登录);403 Forbidden:权限不足(如普通用户访问管理员接口);404 Not Found:资源不存在(URL 错);405 Method Not Allowed:请求方法不允许(如用 POST 访问 GET 接口)

5xx

服务器错误

500 Internal Server Error:服务器内部错误(如代码 BUG);502 Bad Gateway:网关错误(如 Nginx 连不上 Tomcat);503 Service Unavailable:服务暂时不可用(如维护、负载过高);504 Gateway Timeout:网关超时(如 Tomcat 处理太慢)

HTPP版本演进

HTTP 协议不断迭代,核心目标是 “提升性能、优化体验”,各 HTTP 版本核心差异对比:

版本

发布时间

核心传输层

关键特性

主要痛点

当前应用占比(2025)

HTTP/0.9

1991

TCP

仅 GET、纯 HTML、短连接

功能极简,无错误处理

0%(淘汰)

HTTP/1.0

1996

TCP

多方法、HTTP 头部、多媒体

短连接默认,无缓存

<1%(老旧设备)

HTTP/1.1

1999

TCP

长连接、管道化、缓存机制

队头阻塞、头部冗余

40%-50%

HTTP/2

2015

TCP

二进制帧(拆分消息为二进制格式的小块)、多路复用(同时传输多个 HTTP 请求 / 响应)、HPACK(头部压缩算法)

TCP 队头阻塞

45%-55%

HTTP/3

2022

UDP(QUIC)

无队头阻塞、0-RTT、连接迁移

兼容性需完善

10%-20%

关键问题:HTTP/1.1 的 “队头阻塞”

  • 指 “同一 TCP 连接中,前一个请求未完成,后续请求必须排队等待”—— 若前一个请求超时,后续所有请求都卡住。HTTP/2 的多路复用通过 “二进制帧拆分” 解决此问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 17:26:06

【课程设计/毕业设计】基于SpringBoot的网球馆管理系统的设计与实现网球场地预订、课程报名【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/1/10 0:32:47

Open-AutoGLM插件选型难题终结者:3步判断哪个插件真正值得装

第一章&#xff1a;Open-AutoGLM需要安装插件在使用 Open-AutoGLM 框架前&#xff0c;必须正确安装其核心插件以启用自动化推理与模型调用功能。这些插件扩展了基础语言模型的能力&#xff0c;使其能够接入外部工具、执行代码并实现多步任务编排。环境准备 确保系统已安装 Pyth…

作者头像 李华
网站建设 2025/12/23 17:24:20

为什么顶尖团队都在用Open-AutoGLM?背后的技术优势终于曝光

第一章&#xff1a;Open-AutoGLM的起源与核心定位Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;General Language Model, GLM&#xff09;构建框架&#xff0c;旨在降低大模型开发门槛&#xff0c;提升从数据准备到模型部署的全流程效率。其诞生源于对现有NLP工具链…

作者头像 李华
网站建设 2025/12/23 17:23:37

爆肝整理!7 款渗透测试神器超详细教程,零基础入门到精通,收藏这一篇就够了

渗透测试工具是模拟对计算机系统、网络或 Web 应用程序的网络攻击的软件应用程序&#xff0c;它们的作用是在实际攻击者之前发现安全漏洞。它们可以作为系统的压力测试&#xff0c;揭示哪些区域可能会受到真正的威胁。 本文我将介绍七款最佳的渗透测试工具。 01 Kali Linux …

作者头像 李华