相关疑难解决方法(0)

防止IE缓存

我正在使用Struts开发Java EE Web应用程序.问题出在Internet Explorer缓存上.如果用户注销,他可以访问某些页面,因为它们被缓存并且没有请求.如果我点击刷新它工作正常.此外,如果用户再次进入登录页面,则不会重定向他,因为该页面也被缓存.

我想到了两个解决方案:

  1. 编写一个Interceptor(像servlet过滤器一样)来添加到响应头no-cache等.
  2. 或者<meta>在每个页面上放置标签.

我应该做哪一个?

java internet-explorer jsp struts browser-cache

17
推荐指数
2
解决办法
3万
查看次数

ResponseCache属性不会在客户端缓存数据

在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但没有运气.每次我在地址栏中输入网址或点击刷新时,客户端(即浏览器或邮递员)都会调用操作方法.

asp.net-core-mvc coreclr asp.net-core asp.net-core-1.0

17
推荐指数
3
解决办法
6320
查看次数

注销后如何防止浏览器后退按钮?

用户退出后如何停止后退按钮?(LOGOUT按钮在母版页中)使用webforms

我有几页,最后一页是最后一页,退出后我点击后退按钮显示上一页.我怎么避免这个.请帮助我代码

代码只需在LOGOUT之后触发.用户必须能够返回n如果他在进入时必须进行任何更改,请查看上一页.

c# asp.net jquery

14
推荐指数
2
解决办法
5万
查看次数

IIS/ASP.NET使用cache-control响应:对所有请求都是private

为什么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.我的问题是,添加此标题的是什么,以及如何防止默认情况下添加它?

在此输入图像描述

asp.net iis asp.net-mvc caching

14
推荐指数
2
解决办法
1万
查看次数

每个新的角度生产PWA版本上的“意外令牌&lt;”,直到站点刷新

我知道有一些类似的问题,例如在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

13
推荐指数
2
解决办法
937
查看次数

IE无法下载foo.jsf.IE无法打开这个网站.请求的网站不可用或无法找到

我在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)

这是怎么造成的,我该如何解决?

https jsf internet-explorer download

12
推荐指数
1
解决办法
6861
查看次数

在@ IPad上的Safari上按"后退"按钮时,不会收到"pageshow"

我有以下处理程序:

        $(window).bind('pageshow', function() { alert("back to page"); });
Run Code Online (Sandbox Code Playgroud)

当我离开页面(通过按下链接)并返回页面(通过按"后退"按钮)时,不会调用alert()(IPad 2,iOS 5.1).

我做错了什么?我需要绑定的任何其他事件?

PS:有趣的是,在离开页面时正确接收了Pagehide.

javascript safari jquery mobile-safari

12
推荐指数
3
解决办法
2万
查看次数

禁用浏览器前进/后退按钮的网页缓存

我正在使用以下元标记来阻止页面的浏览器缓存:

<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)

案件:

  1. 浏览器已经打开了page1.
  2. 新链接粘贴在浏览器地址栏中,现在page2打开了安全页面.
  3. 用户执行操作page2并重定向到page3.

单击后退按钮时page3,用户将被重定向到page1(没有缓存,在这种情况下工作正常).当用户单击前进按钮时page1,用户将转发到安全页面page2.这不应该发生.

以上所有内容均在IE9上进行了测试.

这是怎么造成的,我该如何解决?

html jsf internet-explorer cross-browser

12
推荐指数
2
解决办法
3万
查看次数

如何在 create-react-app 中为 index.html 指定 Cache-Control 标头

我正在尝试遵循有关 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”?我不知道如何为不同的资产设置不同的控件。

html caching reactjs create-react-app

12
推荐指数
2
解决办法
4604
查看次数

IE 9+忽略ETag值更改并返回缓存响应

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来缓存资源,但总是重新验证作为参考,但大多数信息与我的问题无关.

如果您有其他想法或建议,请分享

etag internet-explorer caching

11
推荐指数
1
解决办法
2770
查看次数