x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用!
我正在尝试提供可缓存的内容,具体取决于它是否是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”对我不起作用!相关推荐
- 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 ...
- ajax empty,jQuery empty仅在AJAX调用后的第二次单击时起作用
我有两个div .curation-contents-list和.film-contents-list,每个div都有一个链接列表,当点击一个链接时,会发出一个AJAX调用,它将一些JSON数据附加到 ...
- (vue)在ajax获取数据时使用loading组件不起作用
问题描述: 在用ajax获取数据时 页面没有变化,想用一个loading图标在获取数据时显示,获取完成后隐藏 整个系统用到了vue框架,在执行sure方法时调用ajax函数 sure() {conso ...
- Vuejs模拟Ajax请求接口(天气预报API)跨域问题 - 案例篇
vuejs的Ajax跨域请求问题一直都是前端人员开发vue项目进程中经常遇到的不得不解决的热门问题,也是个心病. 首先看一下,页面 报错内容提示: Access to XMLHttpRequest a ...
- ajax中cors解决跨域,AJAX 跨域 CORS 解决方案
两种跨域方法 在 Javascript 中跨域访问是比较常见的事情 就像现在比较流行写单页应用,而单页应用在访问 API 的时候就会有跨域的问题 要解决跨域的问题,其实也并不复杂,有两种方案可以选择 ...
- jquery点击后执行PHP加载div,PHP-将JQuery自动完成附加到由Ajax调用加载的文本字段...
我有一个简单的Web应用程序,在其中创建了一个向导,每个向导页面都包含从数据库填充的不同表单字段,当用户按下时,接下来使用Ajax调用从服务器检索页面数据.这是针对Ajax调用从服务器检索的页面代码. ...
- html 按钮ajax请求,使用单个提交按钮和Ajax在JSP中提交两个HTML表单
我的页面设计是这样的,我必须使用两种形式,单击即提交,然后保存到数据库,反之亦然.我在Struts2 Framework的JSP页面上使用了此工具,我尝试了Ajax解决方案,但它们对我不起作用. 这是 ...
- ajax请求整理(一) 2021.05.12
关于整理Ajax请求的整理. ·····首先Ajax就是起一个异步不刷新页面的作用,就只是局部刷新,地址栏不变,归纳为一句话就是: ·····AJAX 是一种在无需重新加载整个网页的情况下,能够更新部 ...
- I.MX6 ifconfig: SIOCSIFHWADDR: Cannot assign requested address
/*************************************************************************** I.MX6 ifconfig: SIOCSIF ...
最新文章
- java案例——字符串反转
- 观点 | AI 的偏差,取决于人们如何使用机器学习系统
- [Hadoop] Hadoop学习历程 [持续更新中…]
- Project Server的页面如何修改Text
- ASP.NET使用AJAX应注意IIS有没有.ashx扩展
- Poj 1556 The Doors 计算几何+最短路
- jboss4 java_JBoss核心Java Web服务
- HEU 1031 Basic Remains
- Linux下安装informix11.5数据库
- LintCode Coins in a Line II
- 利用第三方rec解锁安卓手机锁屏密码
- 11210怎么等于24_小学生24点题目大全附答案
- 我在阿里工作的这段时间里,都学到了哪些东西
- 10个问题帮你瞬间化解面试中的尴尬,赢得面试官好感
- 欧拉函数的求法(三种)
- BouncyCastle库
- gallery3d源码学习总结(一)——绘制流程drawFocusItems
- 基于CRNN+CTC的改进图像文本识别算法
- 计算机组成原理实验脱机运算器,计算机组成原理实验二: 脱机运算器实验
- python 查找字符串
热门文章
- cnn风格迁移_机器学习:利用卷积神经网络实现图像风格迁移 (一)
- MAC OS 上好用的文本编辑器除了Sublime Text和BBEdit还有这些好用的推荐一下。
- 郊区春游(NC16122)状压dp
- Codeforces Round #777 (Div. 2) ABCD题解
- 论文阅读:FACIAL: Synthesizing Dynamic Talking Face with Implicit Attribute Learning
- IOS前奏之Object-C基础:类的构造函数和description(自描函数)
- 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?
- 互联网未来7大猜想,互联网营销
- 价值链-名词解释01
- vue动态计算表格列两个时间的差值