我正在使用Struts开发Java EE Web应用程序.问题出在Internet Explorer缓存上.如果用户注销,他可以访问某些页面,因为它们被缓存并且没有请求.如果我点击刷新它工作正常.此外,如果用户再次进入登录页面,则不会重定向他,因为该页面也被缓存.
我想到了两个解决方案:
<meta>在每个页面上放置标签.我应该做哪一个?
在ASP.NET Core应用程序中,我有一个返回一些数据的action方法.我想在客户端缓存这些数据.所以根据这里的文档,我可以使用ResponseCacheaction方法的属性.此属性Cache-Control在响应中添加标头
响应缓存是指在ASP.NET Core MVC操作所做的HTTP响应上指定与缓存相关的标头.这些标头指定了您希望客户端和中间(代理)计算机如何缓存对某些请求的响应(如果有的话).这可以减少客户端或代理对Web服务器的请求数,因为可以从客户端或代理的缓存提供对相同操作的未来请求.
也
响应缓存不会缓存Web服务器上的响应.它与输出缓存不同,后者会在早期版本的ASP.NET和ASP.NET MVC中缓存服务器内存中的响应.
所以这就是我的动作方法的样子
public class LookupController : Controller
{
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用浏览器调用方法http:// localhost:40004/lookup/getstateprovinces 这是请求和响应头
请注意,响应标头Cache-Control: public,max-age-120符合预期.但是,如果使用F5刷新页面(120秒之前),则GetStateProvince操作方法中的调试器断点总是会命中.这意味着它不会破坏客户端的数据.
我还需要做些什么来启用客户端缓存吗?
更新 我尝试过使用IE,Chrome和POSTMAN但没有运气.每次我在地址栏中输入网址或点击刷新时,客户端(即浏览器或邮递员)都会调用操作方法.
用户退出后如何停止后退按钮?(LOGOUT按钮在母版页中)使用webforms
我有几页,最后一页是最后一页,退出后我点击后退按钮显示上一页.我怎么避免这个.请帮助我代码
代码只需在LOGOUT之后触发.用户必须能够返回n如果他在进入时必须进行任何更改,请查看上一页.
为什么ASP.NET的所有响应都包含Cache-Control: private?即使是404响应?IIS中是否有设置此默认值的东西,有没有办法配置它?或者ASP.NET中有什么设置这个?
对于动态内容(即所有MVC结果),我不希望它被浏览器缓存,因为它是动态的,可以随时更改.静态内容托管在CDN上,因此IIS不提供服务.
为了澄清,我非常理解什么Cache-Control: private是,之间的区别private,public,no-store,等以及如何/何时使用它们.我的问题是Cache-Control: privateIIS/ASP.NET默认添加的原因以及如何防止默认情况下添加它.据我所知,它可以被缓存动态页面是有用的,但在我的应用程序,我不希望缓存动态页面/响应.例如,我不想XHR JSON响应被缓存,因为它们含有动态内容.不幸的是,服务器会Cache-Control: private自动添加所有响应,因此我必须在任何地方手动覆盖它.
如何重现:使用MVC项目打开visual studio并创建一个新的ASP.NET框架(是的,框架,不是Core.我们无法将系统迁移到核心).现在在IIS Express中启动项目(只需按下播放按钮),然后在浏览器中使用F12 devtools查看http响应.你会看到它包含Cache-Control: private.我的问题是,添加此标题的是什么,以及如何防止默认情况下添加它?
我知道有一些类似的问题,例如在angular 2生产构建之后出现了如此意外的令牌,但实际上并没有回答我的问题。
基本上,我有一个角度应用程序及其PWA,现在每次我第一次访问该网站时,每次进行新的产品构建时,都会遇到类似的错误
然后刷新页面后,该站点即可正常运行。
在任何浏览器/设备上都会发生这种情况
现在我的怀疑是,每次更新应用程序时,捆绑的主要js文件都会更改,并且PWA已缓存了旧的js文件,而该应用程序仍在尝试使用新的js文件。
我的项目结构如下
我有一个根模块,可以延迟加载其他模块,而第一个加载的模块是我的帐户模块,因此用户可以登录
这是我的root-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule, PreloadAllModules } from '@angular/router';
const routes: Routes = [
{ path: '', redirectTo: '/account/login', pathMatch: 'full' },
{
path: 'account',
loadChildren: 'account/account.module#AccountModule',
data: { preload: true }
}
];
@NgModule({
imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
exports: [RouterModule],
providers: []
})
export class RootRoutingModule {
Run Code Online (Sandbox Code Playgroud)
}
因此从技术上讲,用户进入的第一个模块是帐户模块,但是显然必须从根模块重定向它。
所以我所做的是在我的根组件模块中,检查服务工作者是否需要像这样进行更新...
root.component.ts
@import { SwUpdate } from '@angular/service-worker'
... …Run Code Online (Sandbox Code Playgroud) azure azure-web-sites typescript progressive-web-apps angular
我在HTTPS(SSL)主机上的JSF Web应用程序中提供文件下载(通常是CSV或PDF).它在大多数浏览器中都能正常工作,只有IE7/8会出现以下错误:
Internet Explorer无法下载foo.jsf.Internet Explorer无法打开此Internet站点.请求的网站不可用或无法找到.请再试一次
我认为该错误与JSF <h:commandLink>标记与IE不兼容有关.
<h:commandLink value="Download" action="#{bean.download}" />
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
我有以下处理程序:
$(window).bind('pageshow', function() { alert("back to page"); });
Run Code Online (Sandbox Code Playgroud)
当我离开页面(通过按下链接)并返回页面(通过按"后退"按钮)时,不会调用alert()(IPad 2,iOS 5.1).
我做错了什么?我需要绑定的任何其他事件?
PS:有趣的是,在离开页面时正确接收了Pagehide.
我正在使用以下元标记来阻止页面的浏览器缓存:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Vary" content="*" />
Run Code Online (Sandbox Code Playgroud)
案件:
page1.page2打开了安全页面.page2并重定向到page3.单击后退按钮时page3,用户将被重定向到page1(没有缓存,在这种情况下工作正常).当用户单击前进按钮时page1,用户将转发到安全页面page2.这不应该发生.
以上所有内容均在IE9上进行了测试.
这是怎么造成的,我该如何解决?
我正在尝试遵循有关 create-react-app.dev 的生产构建文档的指导:
为了向您的用户提供最佳性能,最佳做法是为 index.html 以及 build/static 中的文件指定 Cache-Control 标头。此标头允许您控制浏览器和 CDN 缓存静态资产的时间长度。如果您不熟悉 Cache-Control 的作用,请参阅这篇文章以获得很好的介绍。
将 Cache-Control: max-age=31536000 用于您的构建/静态资产,以及 Cache-Control: no-cache 用于其他所有内容是一个安全有效的起点,可确保您的用户浏览器始终检查更新的 index.html 文件,并将缓存所有构建/静态文件一年。请注意,您可以安全地使用 build/static 上的一年到期时间,因为文件内容哈希已嵌入到文件名中。
这样做的正确方法是在 index.html 中使用 HTML 标头 - 例如:
<meta http-equiv="Cache-Control" content="max-age: 31536000, no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
Run Code Online (Sandbox Code Playgroud)
(信用:此堆栈溢出响应和此 YouTube 教程)
如果是这样,我该如何遵循文档的建议,即我应该为您的构建/静态资产设置“max-age=31536000,并为其他所有内容设置 Cache-Control: no-cache”?我不知道如何为不同的资产设置不同的控件。
Etag提供的缓存验证适用于FF和chrome,但IE似乎忽略了Etag值并始终返回缓存的响应.
服务器响应是:
HTTP/1.1 200 OK
Date: Mon, 07 Jul 2014 06:01:57 GMT
Content-Type: application/json
ETag: a7628382056ddd13b7e06991571fd3ad
Content-Encoding: gzip
Content-Length: 4360
Run Code Online (Sandbox Code Playgroud)
当客户端发送条件获取请求时
If-None-Match: 71fb49ecd6f85545693dec0e78ae2131
Run Code Online (Sandbox Code Playgroud)
根本不发送请求,IE返回缓存的响应.当ETag值相同时它是透明的但是当ETag不同时它是一个问题.
对我有用的唯一解决方案是添加标题
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)
我监控网络并强制IE验证ETag值.
问题解决了!
但是我没有找到任何正式的解决方案.我使用帖子Make IE来缓存资源,但总是重新验证作为参考,但大多数信息与我的问题无关.
如果您有其他想法或建议,请分享