【JavaWeb】HTTP、Cookie、Session详解

目录

一、HTTP协议

1.HTTP请求协议

2.HTTP响应协议

3.HTTP请求方法

4.HTTP状态码

二、Cookie

1.Cookie定义

2.Cookie的工作原理

3.Cookie用法

4.Cookie的主要内容

三、Session

1.Session定义

2.Session工作原理

3.Session用法

4.Session优缺点

四、Cookie和Session区别

一、HTTP协议

HTTP协议(Hypertext Transfer Protocol)是一种用于从万维网(World Wide Web)服务器传输超文本到本地浏览器的传送协议。‌它是一种应用层协议,基于TCP/IP模型,通常运行在TCP之上。HTTP协议通过请求和响应的模式进行通信,客户端发送请求到服务器,服务器返回响应。HTTP协议是无状态的,这意味着每次请求都是独立的,服务器不会保存之前请求的状态信息。‌

1.HTTP请求协议

第一行请求行包括请求方法、请求 URL 和 HTTP 协议版本信息;

第二行起的若干行为请求头(Header),用于告知服务器一些额外的信息,如客户端类型、支持的内容格式、是否支持压缩等;

上述例子请求方法为POST请求,请求URL为/DemoEE/form.html,请求协议版本为HTTP/1.1

常见请求头描述
Referer浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链
If-Modified-Since浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。
Cookie与会话有关技术,用于存放浏览器缓存的cookie信息。
*User-Agent*浏览器通知服务器,客户端浏览器与操作系统相关信息
Connection保持连接状态。Keep-Alive 连接中,close 已关闭
Host请求的服务器主机名
Content-Length请求体的长度
Content-Type如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码
Accept:浏览器可支持的MIME类型。文件类型的一种描述方式。MIME格式:大类型/小类型[;参数]例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件
Accept-Encoding浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩
Accept-Language浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)

2.HTTP响应协议

第一行为状态行,HTTP 响应状态码(200 表示成功)和对应的状态信息(OK);

第二行起的若干行为响应头,包括内容类型、内容编码、长度和连接方式等;

剩余部分为响应主体,即服务器返回的实体内容

常见请求头描述
Location指定响应的路径,需要与状态码302配合使用,完成跳转。
Content-Type响应正文的类型(MIME类型)取值:text/html;charset=UTF-8
Content-Disposition通过浏览器以下载方式解析正文取值:attachment;filename=xx.zip
Set-Cookie与会话相关技术。服务器向浏览器写入cookie
Content-Encoding服务器使用的压缩格式取值:gzip
Content-length响应正文的长度
Refresh定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn
Server指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/>
Last-Modified服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。

3.HTTP请求方法

HTTP/1.1支持多种请求方法 ( method ),如下图:

注:图中的数字表示的是支持该方法的最低 HTTP 协议版本 

4.HTTP状态码

HTTP协议定义了多种不同的状态码,每个状态码都对应着不同的响应状态。以下是HTTP协议常见的状态码:

  1. 1xx(信息性状态码):表示请求已经被接收,继续处理。
  2. 2xx(成功状态码):表示请求已经被成功接收、理解和处理,常见状态码为200。
  3. 3xx(重定向状态码):表示需要进行额外操作才能完成请求,常见状态码为302。
  4. 4xx(客户端错误状态码):表示客户端发送的请求有误,服务器无法处理,常见状态码为401,404,405。
  5. 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误,常见状态码为500。

二、Cookie

1.Cookie定义

在说明这个东西之前,我们先来了解一个概念:HTTP 协议是一个无状态的协议,啥叫无状态协议呢?来看下图:

HTTP 的无状态指的是它不会保存任何状态信息,每个请求都是独立的,和其它请求没有任何关系。

为了解决这个问题,HTTP 引入了 cookie 和 session 机制,每次发出 HTTP 请求的时候,都会把 cookie 带上,那么第二次请求通过状态信息就可以知道当前用户是谁了

Cookie 是服务端发送给客户端的一段数据。客户端可以保存该数据,并在后续请求中带上该数据。通常来说,Cookie 用于用户登录等操作。Cookie 使得无状态的 HTTP 变得有状态了。

2.Cookie的工作原理

  • 服务器发送Cookie:用户首次访问网站时,服务器生成一个Cookie并通过HTTP响应头Set-Cookie发送给浏览器
  • 浏览器存储Cookie:浏览器接收到Cookie后将其存储
  • 浏览器发送Cookie:用户再次访问该网站时,浏览器会在HTTP请求头中携带相应的Cookie
  • 服务器读取Cookie:服务器读取Cookie并根据其内容识别用户

3.Cookie用法

通过request.getCookies()方法获取Cookie数组,通过response.addCookie(Cookie cookie)方法向客户端设置Cookie

Cookie  cookie = new Cookie("username","password");
//设置生命周期,单位为秒  MAX_value表示永久有效,-1表示随着浏览器关闭而消失,0表示立刻消失
cookie.setMaxAge(Integer.Max_Value); 
//设置为/表示允许所有的路径都可以使用Cookie
cookie.setPath("/")
response.addCookie(cookie)

4.Cookie的主要内容

名字,值,过期时间,路径和域,路径与域一起构成cookie的作用范围

三、Session

1.Session定义

Session就好比酒店办理入住(打开浏览器会话),填写完身份信息后给到你的一张房卡(Session),有了这张房卡之后,就可以自由进出房间,酒店也可以根据你的房卡为你办理酒店服务(Web页面跳转等操作),在退房之前,这张房卡持续有效,但需要定时续住(生命周期)

2.Session工作原理

  • 创建Session:用户首次访问网站时,服务器创建一个Session,并生成一个唯一的Session ID
  • 发送Session ID:服务器通过Set-Cookie响应头将Session ID发送给浏览器
  • 存储Session:服务器在内存或持久化存储中保存Session数据
  • 浏览器发送Session ID:用户再次访问网站时,浏览器在请求中携带Session ID
  • 服务器读取Session:服务器根据Session ID读取相应的Session数据

3.Session用法

HttpSession session = request.getSession();
//设置属性
session.setAttribute("name","tom");
//读取属性
session.getAttribute("name");
//移除属性
session.removeAttribute("name");
//设置有效期,单位为秒,-1代表永不过期
session.setMaxInactiveInterval(1000);
//使其失效
session.invalidate();

4.Session优缺点

优点:

  • 安全性高:Session数据存储在服务器端,安全性较高
  • 存储容量大:可以存储更多的数据,不受浏览器限制

缺点:

  • 占用服务器资源:用户量大会占用服务器内存或存储空间
  • 依赖Cookie:需要通过Cookie或URL传递Session ID

四、Cookie和Session区别

CookieSession
存储位置客户端(浏览器)服务器
安全性较低,易被窃取较高,数据存储在服务器端
存储容量有限,每个Cookie大小限制约4KB较大,取决于服务器存储能力
性能影响请求中携带过多Cookie会影响性能占用服务器资源
生命周期可设置过期时间,长时间存储会话结束或超时失效
使用场景适合存储少量非敏感数据,如偏好设置适合存储用户状态、敏感数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农的日常生活c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值