问题标签 [vary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
278 浏览

rest - 如果相同的 URL 可以提供不同的内容类型,应该包括接受?

如果相同的 URL 可以为相同的资源提供不同的内容类型,则 Vary 必须包含 Accept ? 或者浏览器缓存和代理是否将其理解为隐式?

例子:

这个回应

或者这个

0 投票
1 回答
638 浏览

apache - 为什么文件大小对于 apache 命令 Header 附加 Vary User-Agent 来触发很重要?

我正在使用 symfony 3,并且有以下 .htaccess 文件(附加到此消息的最底部,标记为'problem .htaccess')。我正在使用网站 gtmetrix.com(它使用 pagespeed)来优化我的网站,但我的 .css 和 .js 文件出现以下错误。

在您提到它之前,它说Header append Vary User-Agent显然没有说接受编码..

1.)(我已经查看了如何在 .htaccess 中指定“Vary: Accept-Encoding”标头),其中讨论了如何设置它。

2.)我列出的代码在我的同一服务器上的另一个站点上工作,我没有收到不同的编码错误消息。,这意味着我拥有的代码无论如何都应该可以工作(另一个站点也有 main.css 和 main.js)。该 htaccess 文件的唯一区别是它用于 SLIM 框架而不是 symfony,因此它如下所示:

超薄框架(其他站点 .HTACCESS)

Symfony 3 框架(问题 .HTACCESS)

问题是: symfony 框架或其 .htaccess 文件不允许我使用该Header append Vary User-Agent命令有什么不同?

更新

因此,在做了一些实验后,我将 symfony 的 .htaccess 文件修改为与 slims 相同的文件,唯一的区别是将 DirectoryIndex app.php 行添加到 slims .htaccess 文件中,然后告诉它改写为 app.php index.php,但错误仍然存​​在。这告诉我它可能不是 htaccess 文件,而是我要创建资产的方式?

在代码中,它在 TWIG 模板中看起来像这样。

也许是因为我正在使用资产,它以某种方式在引擎中对该资源的编码器做一些事情?我不确定它会如何做到这一点,但不确定现在还能去哪里寻找。

更新#2

好的,在这个谜题中取得了重大进展,我得到了可变编码消息,但我不完全确定为什么,但我知道 main.css 文件的文件大小很重要。

当 main.css 有以下内容时,它将无法指定一个 vary:accept 编码头?也许是因为它太小而无法压缩?

但是,给它以下 main.css 内容,然后消息在 gtmetrix 上消失。

我仍然在 javascript 上遇到错误,但我将继续向我的 javascript 文件中添加随机函数,看看这是否会使错误消失。目前我的JS文件是:

更新#3:

事实上,文件大小是罪魁祸首,将我的 js 文件更改为..

足以使标头变化编码错误消失。

更新#4

正在阅读此页面(https://www.fastly.com/blog/best-practices-for-using-the-vary-header),显然如果您使用 mod_deflate 正确的 Vary 标头会自动添加到您的回复中。因此,当 main.css 和 main.js 文件很小时,mod_deflate 很可能会覆盖我建议的更改。

所以新的问题:

为什么尝试添加 Header append Vary User-Agent命令时文件大小很重要?在这种情况下,我应该忽略 gtmetrix (pagespeed) 的速度优化建议吗?或者如果 mod_deflate 被覆盖,这甚至是一个问题吗?如果是这样,我该如何修复 mod_deflate 导致的标头覆盖?

0 投票
1 回答
376 浏览

caching - 当不同的接受编码时,Http标头最大年龄不缓存

我正在尝试使静态文件在浏览器中缓存一小段时间(10 秒)。刷新页面时似乎工作正常。- 如果您是新用户,则为 200 - 如果您在前 10 秒内软刷新,则从缓存中提供 200 - 如果您在超过 10 秒后到达,则为 304。

每当我添加 Http 标头 'Vary': 'Accept-Encoding'它停止工作,这意味着浏览器缓存不再工作(我总是点击服务器)。发生这种情况是因为每当我添加 Http 标头“Vary”时, Http 请求都会停止发送 if-modified-since 或 if-none-match 。

缓存控制和变量兼容是否一起工作?

如果有人可以提出一些解决方案,我会留下 Http 请求和响应:

Express我有这个配置来设置静态文件的响应头:

0 投票
0 回答
179 浏览

mobile - 在桌面和移动设备之间动态服务时使用 Google SEO 正确执行

我已经阅读了关于动态服务的全部内容并且我明白设置正确的 http-headers 是这里的关键!

我的游戏计划很简单;

我将有一个 url 作为“.com/myApp”,然后我将动态地提供我的内容。结果,移动用户将获得“/myApp/index-mobile.php”,而桌面用户将获得“/myApp/index-desktop.php”。为了处理流量,我将让旧的“index.php”嗅探用户代理并像交通警察一样行事。

问题是以下关键的 http 标头在哪里?

header("变化:用户代理,接受");

它只会放在 index.php 中吗?

index-mobile 和 index-desktop php 页面呢?在他们的 HTML 中,我是否需要担心某些事情来告诉 Google 一个是移动站点,而另一个是服务于桌面用户的站点。规范和 rel 属性是否在这里发挥作用,如在单独的网址下服务的注意事项和注意事项中所述?

由于提供动态内容是与“伪装”的边界,我根本不想把事情搞砸。

感谢您在这个重要问题上的专家指导。

谢谢

我认为我不需要包含我的 index.php 的内容,但为了完整起见,我还是会包含它。

0 投票
2 回答
633 浏览

google-chrome - Chrome 是否支持 HTTP Vary 标头

Chrome 的缓存是否支持 HTTP Vary 标头?对于特定的 url 请求,服务器响应两个不同的 html 文件,具体取决于它是否是 ajax 请求。所以我将 Vary 标头添加到 X-Requested-With 中。我期待 Chrome 记录两个缓存条目,但似乎并非如此。我总是收到我提出的第一个请求的缓存命中。这是正常行为吗?

谢谢。

0 投票
0 回答
110 浏览

http-headers - HTTP 请求中的 VARY 标头

HTTP 请求中 VARY 标头的用途是什么?我无法理解 VARY 标头用于跨域和缓存控制的用途。

任何建议表示赞赏。

0 投票
1 回答
112 浏览

apache - 从 Vary 标头中删除 XForward-ssl(Apache 网络服务器)

我们有一个 Apache 服务器位于终止 SSL 的负载均衡器后面。出于商业原因,我们不能完全禁用 HTTP。但是希望将一些 url 重定向到适用于下面的 https,例如。

RewriteCond %{HTTP:X-Forwarded-SSL} ^on$ [NC] RewriteRule ^/url.* https://% {HTTP_HOST}%{REQUEST_URI} [R=301,L]

但是下面的规则是将 xforward-ssl 放在每个请求的可变标头上,这会影响缓存能力。我们可以从 Apache 响应的不同标头中禁用 Xforard-ssl 吗?

0 投票
1 回答
1112 浏览

python - Django 缺少缓存视图的 Vary:Cookie 标头

我有一个基于 Django 1.11 的非常复杂的 webapp。前段时间用户开始报告他们正在获取“其他人的视图”——memcached 为他们提供了由装饰器缓存的 html,@cache_page(xx)而没有区分缓存宽限期内的会话。

经过进一步调查,我发现在某些情况下Vary: Cookie标头丢失并且提供了错误的“会话”。奇怪的是,它只在使用 curl 查询后端时显示(没有会话、用户等 -> 后端服务登录到缓存视图中)。

不幸的是,这个问题真的很难重现,有时会发生,有时不会。我什至从头开始构建一个简单的 Django 应用程序,看看是否可以检查原因。@cache_page观察到的是,当被删除或login_required添加时问题不会发生。

我最终从视图中删除了所有 @cache_page 装饰器,并且在生产中没有观察到该问题,但这是一种解决方法,我想知道是什么原因。

如果有人有任何提示可能是什么原因,将不胜感激!

0 投票
2 回答
109 浏览

wordpress - 如何在 bitnami wordpress 中禁用 Vary 标头

您使用的是哪个版本的应用程序?:WordPress 4.8.2

请选择您获得应用程序的方式:安装程序(Windows、Linux、macOS)、云映像(AWS、GCE、Azure...)或虚拟机(VMDK、VBOX):google cloud

你是否安装了任何插件或修改了任何配置文件?:wp super cache

在此处描述您的问题/建议/问题(预期和实际结果):

由于不同的标头设置,CDN 无法访问我在边缘服务器上的资源。

如何禁用变量:cookie?

在此处输入图像描述

0 投票
1 回答
139 浏览

asp.net-mvc - MVC asp.net OutputCache Vary 响应中缺少标头

当我使用 Response.Cache.SetCacheability(HttpCacheability.Private)并且响应中缺少Response.Cache.VaryByHeaders["someValue"] = true;Vary头时!

和 虽然没有问题。它返回变化:someValueResponse.Cache.SetCacheability(HttpCacheability.Public)Response.Cache.VaryByHeaders["someValue"] = true;

使用 web.config 和控制器属性时同样的问题

add name="myCacheProfile" enabled="true" duration="3600" varyByParam="*" varyByHeader="someValue" location="Downstream" 工作并发送 Vary 标头

添加 name="myCacheProfile" enabled="true" duration="3600" varyByParam="*" varyByHeader="someValue" location="Client" 不起作用!