浏览器的存储,cookie(httponly)、localStorage、sessionStorage、indexed对比

浏览器的存储,cookie(httponly)、localStorage、sessionStorage、indexed对比

  • 1.浏览器的存储
      • 1. Cookie
      • 2. LocalStorage
      • 3. SessionStorage
      • 4. IndexedDB
      • 总结
  • 2.httponly
      • 1. 定义
      • 2. 为什么使用 httpOnly
      • 3. 使用场景
      • 4. 如何设置
      • 5. 限制

1.浏览器的存储

浏览器提供了多种客户端存储机制,每种机制都有其特定的用途、特性和限制。以下是对 cookielocalStoragesessionStorageIndexedDB 的对比:

1. Cookie

  • 存储大小: 通常限制为4KB。
  • 生命周期: 可以设置过期时间。如果没有设置,它的生命周期将与会话持续相同,即关闭浏览器后会被删除。
  • 与服务器交互: 每次HTTP请求都会附带,这可能会浪费带宽。
  • 访问性: JavaScript可以访问,但需要考虑安全性(例如:设置HttpOnly标志以防止通过JS访问)。
  • 使用场景: 适合小量数据的存储,经常用于身份验证(如存储JWT或会话ID)。

2. LocalStorage

  • 存储大小: 通常限制为5-10MB。
  • 生命周期: 没有过期时间,除非明确删除,否则数据会永久存储。
  • 与服务器交互: 数据只在客户端存储,不会随每次请求发送给服务器。
  • 访问性: 可以通过JavaScript访问。
  • 使用场景: 适合大量持久化的数据,如用户偏好设置、主题等。

3. SessionStorage

  • 存储大小: 通常限制为5-10MB。
  • 生命周期: 数据在页面会话期间可用,关闭页面或浏览器后会被清除。
  • 与服务器交互: 数据只在客户端存储,不会随每次请求发送给服务器。
  • 访问性: 可以通过JavaScript访问。
  • 使用场景: 适合需要在浏览器会话中临时存储的数据。

4. IndexedDB

  • 存储大小: 无明确的限制,但可能受到磁盘空间的影响。通常可以存储大量数据。
  • 生命周期: 没有过期时间,除非明确删除,否则数据会永久存储。
  • 与服务器交互: 数据只在客户端存储,不会随每次请求发送给服务器。
  • 访问性: 可以通过JavaScript访问。
  • 结构: 它是一个事务性的数据库系统,可以存储键值对,支持索引,事务和游标。
  • 使用场景: 适合大量数据的存储,如离线应用数据、大数据集等。

总结

  • 大小: cookie < localStorage/sessionStorage << IndexedDB
  • 生命周期: sessionStorage < cookie (如果设置了过期时间) = localStorage = IndexedDB
  • 与服务器交互: 只有cookie会随HTTP请求自动发送。
  • 结构: 只有IndexedDB提供了数据库的功能和结构。
  • 用途: 根据存储需求和数据的大小、持续性来选择合适的存储机制。

2.httponly

当面试中被问到httpOnly时,你可以从以下几个方面来回答:

1. 定义

httpOnly是一个标志,可以在服务器端设置为Cookie。当一个Cookie被标记为httpOnly时,这意味着这个Cookie不能被客户端的JavaScript访问。

2. 为什么使用 httpOnly

主要的使用场景是为了增加安全性。通过设置httpOnly标志,我们可以防止跨站脚本攻击(XSS)中的恶意脚本获取到该Cookie。因为即使攻击者可以注入并执行脚本,由于浏览器的限制,他们不能读取到标记为httpOnly的Cookie的内容。

3. 使用场景

通常,包含敏感信息的Cookie,如会话标识符或其他重要凭证,应该设置为httpOnly,以防止潜在的XSS攻击。

4. 如何设置

在服务器端,当创建或设置Cookie时,可以添加httpOnly属性。例如,在Express的Node.js应用程序中:

res.cookie('name', 'value', { httpOnly: true });

5. 限制

尽管httpOnly可以提高安全性,但它不是XSS的银弹解决方案。你仍然需要其他的安全措施来确保你的应用程序对XSS攻击有充分的防护。

此外,使用httpOnly标志的Cookie仍然可以被其他类型的攻击读取,例如跨站请求伪造(CSRF)或中间人攻击,因此也需要其他安全措施,如设置secure标志和实施CSRF令牌。

总结起来,当你被问及httpOnly时,你可以描述它的定义、目的、使用方式以及其在Web安全中的地位。

你可能感兴趣的:(字节面试题,米哈游面试题,前端,javascript)