Vary HTTP 标头

2024-05-16 13:36
文章标签 http 标头 vary

本文主要是介绍Vary HTTP 标头,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前言

服务器端 Web 资源缓存的想法是在客户端和上游之间设置一个组件来缓存先前计算的结果,以避免后者过载。根据您的基础架构和要求,此组件可以是反向代理或 API 网关。HTTP 提供Cache-Control标头来自定义缓存的不同方面,例如,服务器在认为资源过时之前将其保存在缓存中的时间。我在上面的文章中使用了插件配置,但您也可以委托给Cache-Control。

关于超文本传输​​协议 (HTTP) 字段名称注册表项目的规范,详见链接:超文本传输​​协议 (HTTP) 字段名称注册表-2024-02-16更新

2.问题

想象一下以下场景。你请求一个资源,例如,GET /blog并得到如下结果:

HTTP/1.1 200 OK
Content-Type: application/json{"id": 1,"title": "CSDN"
}

请求成功;结果被缓存。现在,我请求相同的资源,但由于我的代码是围绕 XML 工作的,因此我将标Accept头设置为application/xml。不幸的是,服务器返回缓存的 JSON 资源,这与我要求的不同,可能会完全破坏我的代码。

问题是,缓存键默认只有一个维度,即 URL。

2.解决方案

我们需要一个可配置的多维缓存键。您现在可能已经猜到了,这就是标Vary头的作用:它明确列出缓存键的所有维度。在上面的示例中,上游将使用以下内容传达附加缓存键:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Language: en
Vary: Accept{"id": 1,"title": "CSDN"
}

我们现在不再为每个 URL 设置一个缓存条目,而是为每个 MIME 类型/URL 组合设置一个缓存条目。请注意,是否使用此信息取决于缓存组件。

另一个常见的请求标头是Accept-Encoding,它通常指定客户端可以接受哪些压缩算法。编码是另一个可能的缓存键。规范允许指定多个缓存键:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Language: en
Vary: Accept, Accept-Encoding{"id": 1,"title": "CSDN"
}

这篇关于Vary HTTP 标头的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995056

相关文章

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

构建高性能WEB之HTTP首部优化

0x00 前言 在讨论浏览器优化之前,首先我们先分析下从客户端发起一个HTTP请求到用户接收到响应之间,都发生了什么?知己知彼,才能百战不殆。这也是作为一个WEB开发者,为什么一定要深入学习TCP/IP等网络知识。 0x01 到底发生什么了? 当用户发起一个HTTP请求时,首先客户端将与服务端之间建立TCP连接,成功建立连接后,服务端将对请求进行处理,并对客户端做出响应,响应内容一般包括响应

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq