【计算机网络】初识HTTP(超文本传输协议)
HTTP协议(应用层协议、超文本传输协议)
URL:又叫网址或统一资源定位符

urlencode和urldecode :了解
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY
格式
urldecode就是urlencode的逆过程;
HTTP协议格式
- HTTP请求

首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度;
- HTTP响应
首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在
body中.
HTTP的方法

HTTP的状态码

200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)
HTTP常见Header
Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能




HTTP 无状态协议下,如何通过 Cookie + Session 机制实现用户登录后的会话保持与身份认证,结合了从登录到后续请求的完整流程
- HTTP 无状态的背景
HTTP 协议默认是无状态的,即服务器不会自动 "记住" 不同请求是否来自同一用户。但实际 Web 应用(如登录后保持用户在线、识别身份)需要 "会话保持",因此需借助 Cookie 和 Session 技术。 - Cookie 的角色:传递会话标识
存储与下发:当用户首次登录(提交账号密码),服务器验证通过后,会通过 HTTP 响应头(Set - Cookie),将包含用户信息(或会话标识)的 Cookie 下发到浏览器。Cookie 可存储为文件级(长期保存)或内存级(关闭浏览器即失效)。
自动携带:后续浏览器向同一域名发送请求时,会自动携带 Cookie(包含之前服务器下发的用户标识),让服务器能识别请求来源。 - Session 的角色:服务器端会话存储
Session 的本质:服务器端存储 "用户会话数据" 的容器(如用户身份、登录状态等),通常由服务器内存、数据库或缓存(如图中的 Redis)维护。
与 Cookie 的协作:服务器生成 Session 后,会将Session ID(会话的唯一标识)通过 Set - Cookie 下发到浏览器(Cookie 存储 Session ID)。后续请求中,浏览器携带含 Session ID 的 Cookie 到服务器,服务器通过 Session ID 找到对应 Session,从而获取用户的 "会话上下文"(如是否登录、用户信息)。 - 登录与认证的核心流程(以 "账号密码登录" 为例)
用户登录请求:浏览器向服务器发送账号(如 username=who8)和密码(如 passwd=1234)。
服务器验证与 Session 创建:
服务器验证账号密码有效后,创建 Session(存储用户身份等信息),并生成唯一的 Session ID。
通过 Set - Cookie 响应头,将 Session ID 下发为 Cookie,存储到浏览器。
后续请求的身份识别:
浏览器后续请求(如访问个人主页)时,自动携带含 Session ID 的 Cookie。
服务器通过 Session ID 找到对应 Session,确认用户身份(如已登录),返回个性化内容(如用户专属页面)。 - 存储扩展(Redis 的作用)
图中提到 Redis,说明实际应用中,Session 数据常存储在 Redis 缓存中:
优势:Redis 是高性能内存数据库,支持快速读写、过期时间设置,相比服务器内存,更易分布式扩展、持久化,适合存储 Session。
流程:服务器生成 Session 后,将 Session 数据存入 Redis,并把 Session ID 下发为 Cookie;后续通过 Session ID 从 Redis 中查询 Session 内容