关于http

1 定义

超文本传输协议,一种用于传输超文本(如网页)的协议,它是互联网上用于传输数据的基本协议之一

  1. 无连接性: HTTP 是一种无状态协议,每个请求与响应之间没有持续的连接。每个请求都是独立的,服务器不会保留关于之前请求的信息,这使得 HTTP 协议非常简单。
  2. 文本协议: HTTP 使用文本格式的请求和响应,通常使用 ASCII 编码。这使得它对人类和开发人员来说更容易理解和调试。
  3. 支持多媒体内容: HTTP 不仅支持传输超文本,还支持传输各种多媒体内容,包括图像、音频和视频。
  4. 请求-响应模型: 客户端发送请求,服务器返回响应。请求通常包括请求方法(GET、POST、PUT 等)、请求头、请求体和 URL。响应包括响应状态码、响应头和响应体。
  5. 无状态性: 每个 HTTP 请求都是独立的,服务器不会保留有关客户端的状态信息。如果需要保持状态,通常使用会话(Session)或 Cookie 等机制。

2 方法

  1. GET:向服务器获取数据,不改变服务器状态
  2. POST:向服务器提交数据,一般用于创建新资源或者提交表单,可能会改变服务器的状态
  3. PUT:将指定的数据存储到服务器上,一般用于更新资源或者上传文件
  4. DELETE:删除服务器上的指定资源
  5. HEAD:获取报文首部,与GET相比,不返回报文主体部分
  6. OPTIONS:询问支持的请求方法,用来跨域请求
  7. CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
  8. TRACE:回显服务器收到的请求,主要用于测试或诊断

3 状态码

类别原因描述
1XX信息性状态码接受的请求正在处理
2XX成功状态码请求正常处理完毕
3XX重定向状态码浏览器需要执行某些特殊处理以正常处理请求
4XX客户端错误状态码客户端发生错误
5XX服务器错误状态码服务器本身出错

4 报文结构

4.1 请求报文:

请求报文
请求行:请求方法字段、URL字段、HTTP协议版本字段,使用空格分隔
请求头:由关键字/值组成,每行一对,使用":"分隔
空行
请求体:post put等请求携带的数据
请求报文结构

4.2 响应报文:

响应报文结构
响应行:由网络协议版本,状态码和状态码的原因短语组成,如HTTP/1.1 200 OK
响应头:响应部首组成
空行
响应体:服务器响应的数据

5 缓存

5.1 强缓存

使用强缓存策略,如果缓存的资源有效,则直接使用缓存资源,不必再向服务器发起请求。
通过响应头信息中的Expires属性和Cache-Control属性设置

  • Expires(http1.0):服务器通过该属性来指定资源的过期时间。在过期时间内,该资源可以被缓存使用,不必再向服务器发送请求。
  • Cache-Control(http1.1):提供了对资源更精确的控制,拥有多个值。
  1. public(公共缓存): 表明响应可以被任何缓存(包括私有和共享缓存)保存。
  2. private(私有缓存): 表示响应是专门为单个用户生成的,不应该被共享缓存存储。
  3. no-store(禁止缓存): 指示缓存不应存储有关客户端请求或服务器响应的任何内容。
  4. no-cache(强制确认缓存): 要求缓存在提供响应之前,强制与服务器确认缓存的有效性。
  5. max-age(最大缓存时间): 指定缓存的最大有效时间,以秒为单位。
  6. s-maxage(共享缓存最大有效时间): 与max-age类似,但仅适用于共享缓存,如代理服务器。
  7. must-revalidate(必须重新验证): 表明在资源过期之后,缓存必须向原始服务器发起验证以确保仍然有效。
  8. proxy-revalidate(代理重新验证): 与must-revalidate类似,但仅适用于共享缓存(代理服务器)。
5.2 协商缓存

如果命中强制缓存,就不用再发起请求,直接使用缓存内容,如果没有命中强制缓存,如果设置了协商缓存,这个协商缓存就会发生作用。
命中协商缓存的两个条件:

  • max-age=XXX 过期
  • 值为no-cache
    使用协商缓存策略时,会先向服务器发送一个请求,如果资源没有发生修改,则返回一个304状态,让浏览器使用本地的缓存副本。如果资源发生了修改,则返回修改后的资源。
    通过响应头信息中的Etag属性和Last-Modified属性设置。
  • Last-Modified属性指出资源最后一次修改的时间,当浏览器下一次发起请求时,会在请求头添加一个If-Modified-Since的属性,属性值为上一次资源返回时的Last-Modified的值。精确到秒级,如果1s内多次修改会导致缓存命中不准确。
  • Etag属性是自愿的唯一标识符,当资源发生改变,这个值也会变化。下一次资源请求时,浏览器会在请求头添加一个If-None-Match属性,这个属性的值是上次返回的资源的Etag的值。服务器收到请求后会根据这个值和当前的Etag进行比较,以此判断资源是否发生改变,是否需要返回资源。

Etag的优先级高于Last-Modified。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值