我正在尝试提供可缓存的内容,具体取决于它是否是ajax请求.

场景:

一个小的PHP脚本“/test.php”提供一些HTML输出并设置以下标题:

Expires Wed, 23 Feb 2011 13:30:06 GMT

Cache-Control public, max-age=60

Vary X-Requested-With,Accept-Encoding

输出取决于$_SERVER [‘HTTP_X_REQUESTED_WITH’]状态.

当我的Firefox指向Url时,我得到输出,并且对于下一分钟,我从Browser-Cache获得相同的结果,而不是命中服务器.好的,到目前为止.

当我通过XMLHttpRequest(使用X-Requested-With:XMLHttpRequest Header)请求相同的资源时,我的Firefox不会请求服务器,而是提供来自Cache的(错误)响应!

换句话说,它是一样的.资源上的Ajax-Call填充缓存,后续的Browser-Request服务于Cache的(错误)响应.

有没有人有这方面的经验?我认为这应该是一个很常见的问题 – 根据是否是ajax(在同一个URL上)提供内容.

问候,Ilja

解决方法:

我可以重现这个,但前提是我没有在ajax响应中包含X-Requested-With标头.如果我为ajax调用设置了标头,它主要按预期工作,虽然ajax调用清除了常规请求的缓存,反之亦然 – 内容不会被缓存,但是你永远不会得到错误的内容.

我的PHP文档看起来像这样:

putenv('TZ=PST8PDT');

date_default_timezone_set('America/Los_Angeles');

header('Expires: '.gmdate("D, d M Y H:i:s").' GMT');

header('Cache-Control: public, max-age=60');

header('Vary: X-Requested-With,Accept-Encoding');

echo 'it is now '.date('Y-m-d H:i:s');

?>

我的测试页面是这样的:

load into frame


load into div via ajax

function load(){

var req = new XMLHttpRequest();

req.onreadystatechange = function(){

if (req.readyState == 4){

document.getElementById('di').textContent = req.responseText;

}

}

req.open('GET', 'resource.php', 1);

req.setRequestHeader("X-Requested-With", "XMLHttpRequest");

req.send(null);

return false;

}

当我点击第一个链接时,它会从服务器请求.当我再次点击它时,它来自缓存.每次后续点击都来自缓存,最多60秒.

当我点击第二个链接时,请求将转到服务器.当我再次点击它时,它来自缓存.每次后续点击都来自缓存,最多60秒.

如果我点击链接1,然后链接2,它们都会进入服务器.如果我再次点击链接1,它会再次进入服务器(这是错误的).演示序列(假设全部在60s内):

Reg : server

Reg : cache

Reg : cache

Reg : cache

Ajax : server

Ajax : cache

Reg : server

Ajax : server

结果是,如果你想通过ajax服务时可靠地缓存不同的东西,在发出ajax请求时使用不同的URL(?ajax = 1可以正常工作).

我正在测试最新的FF 4.0

标签:php,ajax,caching,header,vary

来源: https://codeday.me/bug/20190710/1420516.html

x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用!相关推荐

  1. The event in requested index is outdated and cleared (the requested history has been cleared ) 问题和修复

    现象 etcd高负载时客户端 watch etcd 返回401 报错如下:ERROR: watch error 401: The event in requested index is outdate ...

  2. ajax empty,jQuery empty仅在AJAX调用后的第二次单击时起作用

    我有两个div .curation-contents-list和.film-contents-list,每个div都有一个链接列表,当点击一个链接时,会发出一个AJAX调用,它将一些JSON数据附加到 ...

  3. (vue)在ajax获取数据时使用loading组件不起作用

    问题描述: 在用ajax获取数据时 页面没有变化,想用一个loading图标在获取数据时显示,获取完成后隐藏 整个系统用到了vue框架,在执行sure方法时调用ajax函数 sure() {conso ...

  4. Vuejs模拟Ajax请求接口(天气预报API)跨域问题 - 案例篇

    vuejs的Ajax跨域请求问题一直都是前端人员开发vue项目进程中经常遇到的不得不解决的热门问题,也是个心病. 首先看一下,页面 报错内容提示: Access to XMLHttpRequest a ...

  5. ajax中cors解决跨域,AJAX 跨域 CORS 解决方案

    两种跨域方法 在 Javascript 中跨域访问是比较常见的事情 就像现在比较流行写单页应用,而单页应用在访问 API 的时候就会有跨域的问题 要解决跨域的问题,其实也并不复杂,有两种方案可以选择 ...

  6. jquery点击后执行PHP加载div,PHP-将JQuery自动完成附加到由Ajax调用加载的文本字段...

    我有一个简单的Web应用程序,在其中创建了一个向导,每个向导页面都包含从数据库填充的不同表单字段,当用户按下时,接下来使用Ajax调用从服务器检索页面数据.这是针对Ajax调用从服务器检索的页面代码. ...

  7. html 按钮ajax请求,使用单个提交按钮和Ajax在JSP中提交两个HTML表单

    我的页面设计是这样的,我必须使用两种形式,单击即提交,然后保存到数据库,反之亦然.我在Struts2 Framework的JSP页面上使用了此工具,我尝试了Ajax解决方案,但它们对我不起作用. 这是 ...

  8. ajax请求整理(一) 2021.05.12

    关于整理Ajax请求的整理. ·····首先Ajax就是起一个异步不刷新页面的作用,就只是局部刷新,地址栏不变,归纳为一句话就是: ·····AJAX 是一种在无需重新加载整个网页的情况下,能够更新部 ...

  9. I.MX6 ifconfig: SIOCSIFHWADDR: Cannot assign requested address

    /*************************************************************************** I.MX6 ifconfig: SIOCSIF ...

最新文章

  1. java案例——字符串反转
  2. 观点 | AI 的偏差,取决于人们如何使用机器学习系统
  3. [Hadoop] Hadoop学习历程 [持续更新中…]
  4. Project Server的页面如何修改Text
  5. ASP.NET使用AJAX应注意IIS有没有.ashx扩展
  6. Poj 1556 The Doors 计算几何+最短路
  7. jboss4 java_JBoss核心Java Web服务
  8. HEU 1031 Basic Remains
  9. Linux下安装informix11.5数据库
  10. LintCode Coins in a Line II
  11. 利用第三方rec解锁安卓手机锁屏密码
  12. 11210怎么等于24_小学生24点题目大全附答案
  13. 我在阿里工作的这段时间里,都学到了哪些东西
  14. 10个问题帮你瞬间化解面试中的尴尬,赢得面试官好感
  15. 欧拉函数的求法(三种)
  16. BouncyCastle库
  17. gallery3d源码学习总结(一)——绘制流程drawFocusItems
  18. 基于CRNN+CTC的改进图像文本识别算法
  19. 计算机组成原理实验脱机运算器,计算机组成原理实验二: 脱机运算器实验
  20. python 查找字符串

热门文章

  1. cnn风格迁移_机器学习:利用卷积神经网络实现图像风格迁移 (一)
  2. MAC OS 上好用的文本编辑器除了Sublime Text和BBEdit还有这些好用的推荐一下。
  3. 郊区春游(NC16122)状压dp
  4. Codeforces Round #777 (Div. 2) ABCD题解
  5. 论文阅读:FACIAL: Synthesizing Dynamic Talking Face with Implicit Attribute Learning
  6. IOS前奏之Object-C基础:类的构造函数和description(自描函数)
  7. 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?
  8. 互联网未来7大猜想,互联网营销
  9. 价值链-名词解释01
  10. vue动态计算表格列两个时间的差值