一 请求响应

1. 请求(Request)

客户端向服务器发送的HTTP请求,通常包含以下内容:

  • 请求行:HTTP方法(GET/POST等)、请求的URL、协议版本。

  • 请求头(Headers):客户端信息(如浏览器类型、支持的语言)、Cookie、内容类型等。

  • 请求体(Body):POST/PUT请求时携带的数据(如表单参数、JSON)。

在JavaWeb中的处理

  • Servlet通过HttpServletRequest对象接收请求:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // 获取请求参数(如URL中的参数)
    String username = request.getParameter("username");
    
    // 获取请求头信息
    String userAgent = request.getHeader("User-Agent");
}

2. 响应(Response)

服务器处理请求后返回给客户端的HTTP响应,通常包含:

  • 状态行:状态码(如200成功、404未找到)、状态描述。

  • 响应头(Headers):内容类型(如HTML/JSON)、Cookie、缓存控制等。

  • 响应体(Body):返回的实际内容(如HTML页面、JSON数据)。

在JavaWeb中的处理

  • Servlet通过HttpServletResponse对象生成响应:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // 设置响应内容类型(如HTML或JSON)
    response.setContentType("text/html;charset=UTF-8");
    
    // 写入响应内容
    PrintWriter out = response.getWriter();
    out.println("<h1>Hello, World!</h1>");
    
    // 设置响应状态码(可选)
    response.setStatus(200);
}

3. 常见场景

  • GET请求:获取数据(如访问网页),参数通过URL传递。

  • POST请求:提交数据(如表单提交),参数通过请求体传递。

  • 重定向:服务器返回302状态码,让客户端跳转到新URL。

response.sendRedirect("/new-page.jsp");

返回JSON:常用于前后端分离项目。

response.setContentType("application/json;charset=UTF-8");
String json = "{\"name\":\"Tom\", \"age\":20}";
out.print(json);

4. 典型流程

  1. 客户端发送HTTP请求到服务器(如访问/login)。

  2. 服务器解析请求,交给对应的Servlet处理。

  3. Servlet通过request获取参数,执行业务逻辑(如查询数据库)。

  4. Servlet通过response生成响应(返回页面或数据)。

  5. 客户端接收并渲染响应结果。

5 总结

  • 请求(Request):客户端向服务器要数据或提交数据。

  • 响应(Response):服务器处理请求后返回结果。

  • JavaWeb通过HttpServletRequestHttpServletResponse对象封装了HTTP协议的底层细节,开发者只需关注业务逻辑的实现。

二 BS架构与CS架构

1. BS架构(Browser/Server)

定义

用户通过浏览器(如Chrome、Firefox)访问应用,业务逻辑和数据存储集中在服务器端,客户端仅负责展示和简单交互。

特点
  • 客户端:无需安装额外软件,只需浏览器。

  • 服务器:负责核心逻辑、数据处理和存储。

  • 通信:基于HTTP/HTTPS协议,通过请求-响应模式交互。

优点
  • 跨平台:支持任何有浏览器的设备(PC、手机、平板)。

  • 维护方便:只需更新服务器,客户端自动同步。

  • 低成本:无需开发和维护多平台的客户端。

  • 轻量级:适合快速迭代的Web应用(如电商、博客)。

缺点
  • 性能依赖网络:弱网环境下体验差。

  • 功能受限:复杂操作(如3D渲染、本地硬件调用)支持有限。

  • 安全性较低:易受XSS、CSRF等Web攻击。

适用场景
  • Web应用(如在线办公、电商网站)。

  • 信息展示型系统(如新闻门户、企业官网)。

  • 轻量级交互需求(如表单提交、数据查询)。

技术栈
  • 前端:HTML/CSS/JavaScript、React/Vue等框架。

  • 后端:Java/Python/PHP、Spring/Django/Node.js。

  • 协议:HTTP/HTTPS、WebSocket。

2. CS架构(Client/Server)

定义

用户需要安装独立的客户端软件,客户端承担部分业务逻辑,与服务器协同工作。

特点
  • 客户端:需安装特定程序(如桌面应用、手机APP)。

  • 服务器:负责核心数据和业务逻辑。

  • 通信:通常基于TCP/UDP或自定义协议,支持实时交互。

优点
  • 性能高:客户端可处理复杂计算(如图形渲染、本地缓存)。

  • 功能强大:支持本地硬件操作(如摄像头、打印机)。

  • 离线可用:部分功能可在无网络时使用(如本地数据库)。

缺点
  • 开发维护成本高:需适配多平台(Windows/macOS/iOS/Android)。

  • 更新复杂:需用户手动升级客户端版本。

  • 依赖用户设备:硬件兼容性可能存在问题。

适用场景
  • 高性能需求应用(如大型游戏、视频编辑软件)。

  • 本地硬件交互(如工业控制、医疗设备)。

  • 企业级内部系统(如ERP、财务软件)。

技术栈
  • 客户端:C++/C#(桌面)、Java/Kotlin(Android)、Swift(iOS)。

  • 服务器:Java/Python/C++、MySQL/Oracle等数据库。

  • 通信协议:TCP/UDP、gRPC、自定义二进制协议。

HTTP(HyperText Transfer Protocol)是用于客户端(如浏览器)与服务器之间通信的应用层协议,基于请求-响应模型。以下是HTTP请求与响应的核心内容、对象关系及原理的详细说明:


一、HTTP请求与响应的结构

1. HTTP请求

客户端向服务器发起操作请求,包含以下关键部分:

  • 请求行方法 + URL + HTTP版本

    • 方法:定义操作类型(如GET获取资源、POST提交数据、PUT更新资源、DELETE删除资源)。

    • URL:目标资源的路径(如/api/user?id=1)。

  • 请求头(Headers):附加信息(元数据),例如:

    • Host: 目标服务器域名

    • User-Agent: 客户端标识

    • Content-Type: 请求体的数据类型(如application/json

    • Authorization: 身份验证凭证

  • 请求体(Body):可选,用于POSTPUT等方法传递数据(如JSON、表单数据)。

2. HTTP响应

服务器返回请求的处理结果,包含以下部分:

  • 状态行HTTP版本 + 状态码 + 状态描述

    • 状态码:标识结果类型(如200 OK成功,404 Not Found资源未找到,500 Internal Server Error服务器错误)。

  • 响应头(Headers):附加信息,例如:

    • Content-Type: 响应体的数据类型(如text/html

    • Cache-Control: 缓存策略

    • Set-Cookie: 设置客户端Cookie

  • 响应体(Body):返回的数据(如HTML页面、JSON数据)。


二、HTTP交互流程与对象关系

1. 交互流程
  1. DNS解析:客户端将域名(如example.com)解析为服务器IP地址。

  2. 建立TCP连接:通过三次握手建立客户端与服务器的TCP连接(HTTP/1.1默认持久连接)。

  3. 发送HTTP请求:客户端构造请求并发送到服务器。

  4. 服务器处理请求:服务器解析请求,执行逻辑(如查询数据库),生成响应。

  5. 返回HTTP响应:服务器将响应发送回客户端。

  6. 关闭连接:若未启用持久连接(Connection: close),则关闭TCP连接。

2. 关键对象关系
  • 客户端:发起请求的终端(浏览器、移动应用等)。

  • 服务器:接收请求并返回响应的后端程序(如Nginx、Apache、Node.js)。

  • 代理与网关:中间组件(如CDN、反向代理)可能修改请求/响应。

  • 资源:URL指向的实体(HTML文件、API数据等)。


三、HTTP核心原理

1. 无状态协议
  • HTTP本身不保存客户端状态,每个请求独立处理。

  • 解决方案:使用CookieSession或Token(如JWT)跟踪用户状态。

2. 持久连接(HTTP/1.1)
  • 默认复用TCP连接发送多个请求,减少握手开销(通过Connection: keep-alive)。

3. 缓存机制
  • 通过响应头Cache-ControlETag等实现资源缓存,减少重复请求。

4. 安全机制
  • HTTPS:通过TLS/SSL加密传输数据(如HTTP over TLS)。

  • CORS:跨域资源共享策略,限制非同源请求。

  • CSRF防护:通过Token验证防止跨站请求伪造。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐