条件GET方法(The conditional GET)

本文深入探讨了HTTP条件GET机制,解释了如何通过If-Modified-Since头行确认缓存对象是否为最新,避免了不必要的数据传输,提高了网络效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

条件GET方法(The Conditional GET)

尽管缓存可以减少用户感知到的响应时间,但是缓存引入了一个新的问题。
存储在cache中的对象可能是陈旧的。换句话说,自从对象的副本被缓存到这个cache,存储在web服务器端的对象可能被修改过。

幸运的是,HTTP提供了条件GET(conditional GET)机制,这个机制使得cache能够确认它的对象是最新的。

什么样的HTTP请求报文属于条件请求报文呢?
(1)请求报文使用了GET方法
(2)请求报文包括了一个If-Modified-Since头行
为了展示一下条件GET是如何运作的,我们还是举一个例子。

1.代理服务器代表请求浏览器发送一条请求报文给web server
GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com

2.Web 服务器将带有请求对象的响应报文发送给cache

HTTP/1.1 200 OK
Date: Sat, 8 Oct 2011 15:39:29
Server: Apache/1.3.0 (Unix)
Last-Modified: Wed, 7 Sep 2011 09:23:24
Content-Type: image/gif

(data data data ...)

cache将这个对象转发给请求的浏览器并且将这个对象缓存到自己的本地存储。重要的是,cache将这个对象上次修改的时间也存储了起来。

3.一周之后,另一个浏览器通过cache请求了相同的对象,并且这个对象仍然在cache里。由于这个对象可能在过去的一周里被修改过,cachejiu 就发起一个conditional GET来做一个更新检查。

具体的报文如下

GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com
If-modified-since: Wed, 7 Sep 2011 09:23:24

注意If-modified-since的值就是一周前Last-Modified的值。这个条件GET告诉服务器仅在对象在这个时间之后被修改的情况下才发送这个对象给我。

假定这个对象自从一周前没有被修改过,那么第4步:

4.Web服务器就会发送一个响应报文

HTTP/1.1 304 Not Modified 
Date: Sat, 15 Oct 2011 15:39:29 
Server: Apache/1.3.0 (Unix)

(empty entity body)

我们可以看到,在回复条件GET时,web server依然发送 了一个响应报文但是并没有在响应消息中包含请求的对象。包含请求的对象会浪费带宽,增加用户感知响应时间。

注意,最后一条响应报文有一个304的状态码,意思是Not Modified。这也就告知了缓存它可以继续了,将这个对象的cached copy发送给请求的browser.

### 条件互信息的定义与计算 条件互信息(Conditional Mutual Information, CMI)是对两个随机变量之间的依赖关系的一种度量,它考虑了第三个随机变量的影响。具体来说,条件互信息衡量的是在已知某个随机变量 \( Z \) 的情况下,另一个随机变量 \( X \) 和目标变量 \( Y \) 之间剩余的相关性。 #### 数学定义 设 \( X \), \( Y \), 和 \( Z \) 是三个离散型随机变量,则条件互信息被定义为: \[ I(X;Y|Z) = H(X|Z) - H(X|Y,Z) \] 其中: - \( H(X|Z) \) 表示给定 \( Z \) 后 \( X \)条件熵; - \( H(X|Y,Z) \) 表示同时给定 \( Y \) 和 \( Z \) 后 \( X \)条件熵。 通过展开上述公式,还可以得到另一种形式的表达方式: \[ I(X;Y|Z) = \sum_{z} p(z) \cdot I(X;Y | z) \] 这里,\( I(X;Y|z) \) 是当 \( Z=z \) 时 \( X \) 和 \( Y \) 的互信息[^1]。 #### 计算方法 为了计算条件互信息,通常需要以下几个步骤: 1. **估计联合概率分布**:基于数据集估算 \( P(x,y,z) \),这是整个计算的基础。 2. **求解边缘概率和条件概率**:利用联合概率分布分别计算 \( P(x|z) \), \( P(y|x,z) \) 等所需的概率项。 3. **代入公式并积分/求和**:将这些概率值代入到条件互信息的定义式中完成数值化处理。 对于连续型随机变量的情况,可以通过核密度估计或其他非参数统计技术近似获得所需的概率密度函数后再进行相应运算[^4]。 ```python import numpy as np from scipy.stats import entropy def conditional_mutual_information(p_xyz): """ Calculate the Conditional Mutual Information (CMI). Parameters: p_xyz : array-like of shape (n_x, n_y, n_z) Joint probability distribution P(X,Y,Z). Returns: cmi_value : float The calculated value of CMI. """ # Marginalize over y to get P(x,z) pxz = p_xyz.sum(axis=1) # Compute individual terms needed for CMI formula term1 = sum([pxz[x][z]*entropy(p_xyz[x,:,z]) for x in range(pxz.shape[0]) for z in range(pxz.shape[1])]) term2 = entropy(pxz.ravel()) return term2 - term1 ``` 此代码片段提供了一个简单的实现框架用于计算离散情况下的条件互信息。 ### 应用场景 在机器学习领域,条件互信息广泛应用于特征选择、因果推断以及评估模型性能等方面。例如,在构建决策树过程中,除了单纯依靠信息增益外,也可以引入条件互信息作为分裂准则之一来提升算法效果;另外,在复杂网络结构的学习当中,借助条件独立假设检验配合条件互信息能够有效揭示隐藏模式。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chenglin_Yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值