Skip to content

Java Web 网络基础问答

整理 Web 基础中的高频面试题:XML 与 HTML 的区别、XML 约束、HTTP 协议、请求响应结构、GET/POST 如何选择、服务器的组成。每题先给出面试标准回答,再用人话解释一遍,方便理解记忆。

1. XML 和 HTML 有什么区别?

面试回答:

HTML(超文本标记语言)和 XML(可扩展标记语言)的核心区别在于设计目的不同:

  • HTML:标签是预定义、固定的(如 <div><p><table>),语义是"如何展示",浏览器负责把标签渲染成页面效果。
  • XML:标签可以自定义,语义是"如何描述数据",常用于配置文件存储和系统间数据传输(在 JSON 普及之前是主流的数据交换格式)。
  • 语法严格度不同:XML 文档必须有且只有一个根标签,标签必须正确嵌套、成对闭合,文件头部要有 <?xml version="1.0"?> 声明;HTML(尤其 HTML5)语法宽松得多,浏览器会自动纠错容错。

一句话总结:HTML 关注展示,XML 关注数据结构。两者都是标记语言,区别在于标签是否固定、用途是展示还是携带数据。

补充纠正:常见说法"HTML = XML + DTD"并不准确。HTML 源自 SGML,和 XML 是平行发展的两套标记语言标准;真正"用 XML 语法规则重写 HTML"的产物叫 XHTML,它才是 HTML 与 XML 语法结合的结果。

人话解释:

HTML 就像一套装修图纸的固定模板,墙、门、窗户的画法都是定死的,浏览器一看就知道怎么画出页面。XML 是一张空白图纸,标签含义你自己定义,比较适合用来存数据、或者在不同系统之间传数据(后来这个活儿基本被更轻量的 JSON 抢走了)。

2. XML 约束有什么作用?约束类型和引入方式?

面试回答:

XML 标签可以自定义,如果没有任何限制,同一份数据每个人都能写出不同的标签结构,无法互相解析。XML 约束就是用来规定一份 XML 文档"允许出现哪些标签、标签的顺序、属性、内容格式",作用有三点:

  1. 限制标签的书写规则,防止乱写
  2. 开发工具能据此提供自动补全和校验提示
  3. 不同系统之间约定好格式后,配置传递更可靠

约束分为两类:DTD 和 Schema(XSD)。

  • DTD(文档类型定义):语法简单,但不支持数据类型校验,无命名空间机制,引入方式:

    xml
    <?xml version="1.0"?>
    <!DOCTYPE 根标签 SYSTEM "xx.dtd">
    <根标签>...</根标签>
  • Schema(XSD):本身也是一份 XML 文档,支持数据类型、命名空间,是 DTD 的替代方案,引入方式:

    xml
    <?xml version="1.0"?>
    <根标签
        xmlns="默认命名空间"
        xmlns:别名="其他命名空间"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="命名空间1 xxx1.xsd 命名空间2 xxx2.xsd">
      <标签名/>          <!-- 属于默认命名空间 xmlns -->
      <别名:标签名/>      <!-- 属于别名对应的命名空间 -->
    </根标签>

人话解释:

约束就是给 XML 定"格式规范",好比公司统一的合同模板:字段名、顺序、类型都提前约定好,别人不能随便乱填。DTD 是老式的简单模板,只能限制标签结构;Schema 是升级版,还能限制数据类型(比如某个字段必须是数字),并支持"命名空间"来区分不同来源的标签(类似 Java 里用包名 com.xxx.User 区分不同包下同名的类)。

3. 什么是 HTTP 协议?主要有什么作用?

面试回答:

HTTP(超文本传输协议)是应用层协议,规定了客户端和服务器之间请求与响应的数据格式。它底层依赖 TCP/IP 提供可靠的字节流传输:

  • 建立连接时经历 TCP 三次握手(SYN → SYN+ACK → ACK)
  • 断开连接时经历 TCP 四次挥手(FIN/ACK 交换,因为 TCP 是全双工,两个方向要分别关闭)

HTTP 本身是无状态、基于请求-响应模型的协议:客户端发起一次请求,服务器返回一次响应,双方不会主动记住上一次交互的状态(这也是后来需要 Cookie/Session/Token 来维持状态的原因)。目前主流版本是 HTTP/1.1(默认长连接)、HTTP/2(多路复用)、HTTP/3(基于 UDP 的 QUIC)。

人话解释:

HTTP 就是浏览器和服务器"打电话"时用的通话格式规范:先约定好怎么开头、怎么说重点、怎么挂电话。这次通话本身依赖 TCP 这条稳定的"电话线"(三次握手相当于打电话前先确认"你能听到我吗""能""那我们开始说";四次挥手是挂电话时双方都说一次"没有话要说了"才真正挂断)。HTTP "无状态"指的是:这次通话挂了之后,下次再打电话,对方完全不记得你是谁,除非你主动带上"身份证"(Cookie/Token)。

4. 请求和响应数据包的结构是什么?

面试回答:

请求(Request)报文结构:

请求行   GET /index.html HTTP/1.1
请求头   Host: example.com
         User-Agent: ...
         Content-Type: application/json
请求空行  (CRLF,标志头部结束)
请求体   {"key": "value"}   (GET 一般没有请求体)

响应(Response)报文结构:

状态行   HTTP/1.1 200 OK
响应头   Content-Type: text/html
         Content-Length: 1234
响应空行  (CRLF)
响应体   <html>...</html>   (实际返回的数据,字节流)

要点:请求行三部分是方法、URL、协议版本;状态行三部分是协议版本、状态码、状态描述;头部和主体之间必须有一个空行分隔,这是 HTTP 报文解析的关键分界点。

人话解释:

请求报文就像寄快递的运单:第一行写清楚"寄什么方式、寄到哪、用哪个协议"(请求行),中间贴一堆标签写备注信息(请求头),空一行后面才是真正要寄的东西(请求体)。响应报文是收件人回你的单子:第一行告诉你"处理结果是成功还是失败"(状态行 200/404/500),后面同样是备注信息加实际内容。这个"空行"很关键,程序解析报文时就是靠这个空行来判断"头部读完了,接下来是正文"。

5. GET 和 POST 有什么区别?如何选择?

面试回答:

维度GETPOST
语义获取资源提交/创建资源
参数位置拼接在 URL 后(?key=value),无请求体放在请求体中
数据大小受 URL 长度限制(浏览器/服务器通常限制在几 KB)理论上无限制
安全性参数暴露在 URL、浏览器历史、日志中相对不暴露在 URL,但仍非加密,需配合 HTTPS
幂等性幂等(多次请求结果一致),可被浏览器缓存非幂等,不会被缓存

选择原则: 优先用 GET;当出现以下情况之一时改用 POST:

  1. 传递的数据量较大(一般以 2KB 作为经验分界线)
  2. 传递敏感/隐私数据(如密码)
  3. 是新增、修改等有副作用的操作(不满足幂等语义)

人话解释:

GET 相当于"我要看看这个东西",参数写在网址栏里,谁都能看到(就像把收货地址写在快递盒外面),而且浏览器会记住这次请求方便你重复访问或缓存。POST 相当于"我要交个东西给你",内容装在包裹内部(请求体),网址栏看不到,适合传密码、传大文件、或者传"会改变服务器数据"的操作(比如注册、下单)。经验法则:能用 GET 就用 GET,涉密或数据量大就换 POST。

6. 什么是服务器?服务器由哪三部分组成?

面试回答:

在一个 Web 项目中,架构分为**客户端(Client)服务端(Server)**两侧:

  • 客户端:负责界面展示和用户交互,形式多样 —— 浏览器(HTML/CSS/JS + 前端工程化:Vue/Node/npm/Axios/Pinia/Element Plus)、Android App、iOS App、微信/支付宝小程序、甚至现在的 AI 智能体客户端。
  • 服务端(服务器):负责业务逻辑处理,返回数据给客户端(通常以 JSON 格式传输)。

服务器由三部分组成:

  1. 服务器主机:物理机或云主机,提供硬件资源(CPU、内存、磁盘、网络)
  2. 服务器软件:能够接收 HTTP 请求并响应的软件环境,如 Tomcat、Nginx、Jetty
  3. Web 项目:部署在服务器软件上的具体业务应用(如一个 Spring Boot 打的 jar 包)

三者关系:主机提供硬件能力 → 软件提供协议解析和请求调度能力 → Web 项目实现具体业务逻辑,三者叠加才能对外提供完整的 Web 服务。

人话解释:

做一个 Web 系统分两块:客户端负责"给用户看",服务端负责"处理逻辑、存数据",两边通过 JSON 传数据。而"服务器"这个词其实是三层叠加的:最底下是一台电脑(主机),电脑上装了一个能听懂 HTTP 请求的软件(比如 Tomcat,相当于翻译官),软件上再跑着你写的具体项目代码(比如一个电商系统)。所以说"服务器",既可以指那台机器,也可以指跑在机器上的软件,要看上下文。

最近更新