HTTP、Cookie、Session知识小计

一、HTTP 协议核心原理

1. HTTP 是什么

HTTP 是超文本传输协议 ,是浏览器和服务器之间通信的标准规则。所有网页、接口、图片、数据传输,都基于 HTTP 完成。

2. HTTP 最重要特性:无状态

无状态 = 服务器不记住任何用户。每一次请求都是独立的,服务器不知道:

  • 是谁发的请求
  • 之前有没有发过请求
  • 有没有登录

这就是必须使用 Session 实现登录状态的根本原因。

3. GET 请求详解

作用

获取数据、查询数据。

特点

  • 参数拼接在 URL 地址后面
  • 可见、不安全,不能传密码等敏感信息
  • 长度有限制(大约 2KB 以内)
  • 会被浏览器缓存、保存到历史记录
  • 幂等:多次请求结果一样
  • 适合:查图书、查列表、查购物车

4. POST 请求详解

作用

提交数据、新增、修改、删除、登录。

特点

  • 参数放在请求体中,不在 URL 显示
  • 安全、隐私性强
  • 数据大小无限制
  • 不会被缓存
  • 适合:登录、加入购物车、提交表单

5. GET 与 POST 最核心区别

  • 查数据 → GET
  • 传敏感数据 / 改数据 → POST

二、会话技术:Cookie 与 Session(必考重点)

1. 为什么需要会话?

因为 HTTP 无状态,服务器无法识别用户身份。必须通过会话技术让服务器 "记住" 用户。

  • 保存在浏览器中的一小段文本数据
  • 由服务器创建,通过响应头返回给浏览器
  • 浏览器之后每次请求都会自动带上 Cookie
  • 容量小(最多几 KB)、可被用户禁用、可篡改、不安全

3. Session 原理

  • 保存在服务器内存中的对象
  • 每个用户拥有独立的 Session
  • 服务器只给浏览器一个 SESSIONID
  • 真正的用户信息(用户 ID、登录状态)存在服务器
  • 安全、可靠、不能被篡改
  • Session 依赖 Cookie 传递 SESSIONID
  • Cookie 只存 ID,Session 存真实数据
  • 关闭浏览器 → Cookie 失效 → Session 无法识别

对比:

对比维度 Cookie Session
存储位置 浏览器客户端 服务器端
存储内容 只存字符串(通常是 SESSIONID),也可直接存用户数据 存真实用户数据:用户 ID、登录状态、权限等
安全性 低:数据暴露在客户端,可被篡改、窃取 高:数据只在服务器,客户端拿不到真实信息
容量限制 约 4KB 无限制(服务器内存决定)
生命周期 可设置持久化时间,或随浏览器关闭而失效 依赖SESSIONID,默认超时 / 服务器重启后失效
依赖关系 不依赖 Session 依赖 Cookie 传递 SESSIONID
使用场景 记住登录状态(如 "记住我")、用户偏好设置 登录会话管理、用户身份识别、购物车数据
典型问题 易被篡改、窃取,不适合存敏感数据 服务器压力较大,Session 共享需要额外处理

5. 登录流程(Session 核心逻辑)

  1. 用户输入账号密码发送请求
  2. 后端校验成功
  3. 服务器创建 Session,把用户 ID存入 Session
  4. 服务器自动把 SESSIONID 写入浏览器 Cookie
  5. 后续请求浏览器自动带 SESSIONID
  6. 服务器通过 ID 找到对应用户 → 识别登录状态

6. 一句话区分

Cookie 存在浏览器,不安全;Session 存在服务器,安全。

四、Servlet 核心作用(后端控制层)

1. Servlet 是什么

运行在服务器端的 Java 程序,专门处理浏览器请求。

2. Servlet 的四大功能

  1. 接收前端请求参数
  2. 获取 Session,判断用户是否登录
  3. 调用数据库执行增删改查
  4. 返回 JSON 格式结果给前端

五、前后端交互完整流程

1. 前端做什么

  • 收集用户输入(账号、密码、图书 ID)
  • 通过 AJAX 发送请求
  • 传递参数给后端
  • 接收 JSON 结果
  • 根据状态码判断成功 / 失败
  • 弹窗提示、页面跳转、渲染列表

2. 后端做什么

  • 接收请求
  • 获取参数
  • 判断登录状态(Session)
  • 操作数据库
  • 返回固定格式 JSON(code + message)

3. 前后端交互规范

统一使用 JSON 格式。通过 code 状态码判断结果:

  • 200:成功
  • 401:未登录
  • 999 / 500:失败
相关推荐
叼烟扛炮4 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
xixingzhe213 小时前
AI 对话打字机效果:SSE 和 HTTP 的区别与适用场景
网络·网络协议·http
xiaoye-duck13 小时前
《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
布裘14 小时前
【银河麒麟】重启后时区丢失?排查发现 localtime 被业务程序替换成硬链接
linux·运维·网络
zhikouai15 小时前
把外部助手接进聊天软件的架构分层与参数配置
服务器·网络·php
huainingning15 小时前
锐捷10.X路由器版本升级不生效问题排查
运维·网络·智能路由器
QZ1665609515918 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
网络·人工智能·安全·网络安全·政务
叼烟扛炮18 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮18 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风19 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络