相关疑难解决方法(0)

IIS7缓存控制

我正在尝试做一些我认为相当简单的事情.获取IIS 7告诉客户他们可以在我的网站上缓存所有图像一段时间,比方说24小时.

我已尝试过http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx上的步骤,但无济于事.我仍然得到返回304s的服务器请求.

有没有人有办法做到这一点?我有一个图形密集型网站,每次他们请求页面时我的用户都被锤击(我的服务器也是如此).很奇怪,这些图像似乎在Firebug中出现了"Cache-Control private,max-age = 3600",但是当我按下F5时,浏览器仍在请求它们.

asp.net iis iis-7 caching

90
推荐指数
5
解决办法
10万
查看次数

利用IIS中的浏览器缓存(google pagespeed issue)

关于利用浏览器缓存有几个问题,但我没有找到任何有助于在ASP.NET应用程序中执行此操作的内容.谷歌的Pagespeed告诉这是性能最大的问题.到目前为止,我在我的web.config中这样做了:

<system.webServer>
  <staticContent>
    <!--<clientCache cacheControlMode="UseExpires"
            httpExpires="Fri, 24 Jan 2014 03:14:07 GMT" /> -->
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.24:00:00" />
  </staticContent>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

评论代码有效.我可以将expire header设置为将来某个特定时间,但我无法设置cacheControlMaxAge从现在开始静态内容的缓存天数.这是行不通的.我的问题是:

我怎样才能做到这一点?我知道有可能只为特定的文件夹设置缓存,这是一个很好的解决方案,但它也不起作用.应用程序托管在Windows Server 2012上,在IIS8上,应用程序池设置为经典.

在web配置中设置此代码后,我的页面速度为72(之前为71).没有缓存50个文件.(现在49)我想知道为什么,我只是意识到一个文件实际上是缓存的(svg文件).不幸的是png和jpg文件没有.这是我的web.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
    <section name="exceptionManagement" type="Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManagerSectionHandler,Microsoft.ApplicationBlocks.ExceptionManagement" />
    <section name="jsonSerialization"     type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions,   Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E34" requirePermission="false" allowDefinition="Everywhere" />
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"    />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"    />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <exceptionManagement mode="off">
    <publisher …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis caching httphandler

50
推荐指数
3
解决办法
5万
查看次数

将Expires或Cache Control Header添加到IIS中的静态内容

在网站上运行YSlow插件之后,我看到其中一个建议是在脚本,样式表和图像中添加远期未来的过期标题.

我想这样做,有没有人有这方面的经验?我正在使用IIS 7,我读了一篇来自微软文章,但对于禁用asp页面或图像的缓存并不感兴趣,我实际上想强制缓存静态内容.此外,理想情况不会存在于代码中,而是存在于Web服务器配置中.

那么,我需要采取哪些步骤来缓存每个图像,javascript文件和样式表?

.net iis caching http

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

如何使用weserver配置设置禁用IIS 7中单个文件的缓存

有没有办法在我的ASP.NET应用程序中缓存单个javascript文件的缓存而不禁用应用程序中任何其他文件的缓存?

它在Azure中的IIS 7上运行,所以对我而言,我唯一的控制它的选项是在webserver标签内.

我目前使用folowwing配置,但这是禁用所有文件的缓存.

     <modules runAllManagedModulesForAllRequests="true"/>

    <staticContent>
      <clientCache cacheControlMode="DisableCache"/>
    </staticContent>

  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

我只是想禁用一个经常更改的单个javascript文件的缓存.

可能吗?

xml iis iis-7 caching azure

37
推荐指数
4
解决办法
4万
查看次数

304未在静态文件上修改

将项目移动到生产服务器后,我发现静态文件(如图像)不会返回状态为"304 not modified",尽管有"Last-Modified"和"Expires"等缓存标题.

请求标题

Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2
Cache-Control:max-age=0
Connection:keep-alive
Cookie:_LANG=ru
DNT:1
Host:test.com
If-Modified-Since:Mon, 07 Sep 2015 08:46:37 GMT
If-None-Match:"1D0E949B4DCD480"
Referer:http://test.com/ru/Some/Index/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,     like Gecko) Chrome/45.0.2454.85 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

响应标头

HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/png
Expires: Tue, 08 Sep 2015 14:33:06 GMT
Last-Modified: Mon, 07 Sep 2015 08:46:37 GMT
Accept-Ranges: bytes
ETag: "1D0E949B4DCD480"
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 07 Sep 2015 14:33:06 GMT
Content-Length: 5953
Run Code Online (Sandbox Code Playgroud)

在本地"IIS快递"一切正常.

本地响应标头

HTTP/1.1 304 Not Modified …
Run Code Online (Sandbox Code Playgroud)

asp.net iis asp.net-mvc iis-8

25
推荐指数
1
解决办法
2317
查看次数

web.config文件中的staticcontent标记到底适用于什么?

我一直在阅读web.config文件中的staticContent元素,但我在确定ASP.Net究竟认为静态内容时遇到了一些麻烦.我假设它将包括图像,js文件,CSS和静态html文件,但我似乎找不到任何明确说明这一点的文章.有没有人有文档链接详细解释这个?

asp.net web-config static-content

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

如何确保静态内容缓存在客户端?

如何确保缓存静态内容(图像,css,javascript)?什么是最好的方法?

asp.net iis caching browser-cache

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

在ASP.NET中,如何仅为TTF文件添加CORS标头?

我有一个带有iframe的页面,显示了一个外部页面.外部页面配置为从我的服务器下载CSS文件.

在CSS中,我添加了一个@font-face选择器:

@font-face {
    font-family: "Special Font";
    src: url("<%= Request.Url.GetLeftPart(UriPartial.Authority) + "/fonts/specialfont.ttf" %>");
}
Run Code Online (Sandbox Code Playgroud)

这会在Chrome中下载并显示字体,但在Firefox中,它会下载字体,但拒绝使用它.进行一些研究表明,这个问题是一个跨领域的政策问题.这里提到的解决方案之一:

http://enable-cors.org/

是启用CORS头.但是,它提供的解决方案是在整个网站范围内:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <httpProtocol>
                <customHeaders>
                    <add name="Access-Control-Allow-Origin" value="*" />
                </customHeaders>
            </httpProtocol>
        </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

而我只想为.TTF文件启用它.有没有办法通过使用HttpHandler或其他方法来做到这一点?

c# asp.net font-face cors

7
推荐指数
1
解决办法
3929
查看次数

浏览器不会从服务器请求最新的PDF

我在Windows Server IIS Web服务器上有一个PDF,用户在其中使用IE8 / 9/10使用HTTP调用来请求它,像这样...

http: // mydomain.com / somefolder / myFile.pdf
Run Code Online (Sandbox Code Playgroud)

第一次点击将下载文件没有问题。 问题:如果管理员更新了PDF,并且用户返回以重新加载它,则IE仅显示本地缓存的版本,而不会从服务器请求新版本。

我已经确认,根据第二个请求,IE8,IE9和IE10根本不会为PDF文件调用服务器。甚至没有条件请求(例如,if-updated-since)。使用Fiddler和WireShark确认了这一点。但是我从来没有用Max-Age或任何东西来明确设置缓存。我没有为该文件夹设置缓存。我不希望将缓存设置为“立即过期”。它也针对Word DOC。

Internet Explorer中是否存在一个错误,使其无论何时都始终使用静态文档(例如PDF,DOC)的本地副本?

这些想法不起作用:

  1. F5CTRL+ F5SHIFT+F5

  2. 使用DELETE HISTORY按钮删除浏览器历史记录并缓存。为什么这实际上不能清除所有缓存,这超出了我的范围。除密码外,我已选择删除所有内容。

我唯一了解的方法是:

  1. 手动删除本地PDF,因为“删除历史记录”按钮不会删除本地版本。但是大多数用户并不那么精明。

  2. 使用Firefox,但这不是公司认可的浏览器。不要让我开始。

  3. 将服务器缓存设置为“立即过期”,但是pdf包含在带有网页的文件夹中,我不希望这样做。我想将缓存最长期限用于CSS,脚本,图像等其他内容。

  4. 在末尾添加一个伪查询字符串(如?id = 1),该方法有效,但是业务线中有100多个文档,每个文档中的链接都必须更新。

  5. 使用FIDDLER“清除缓存”按钮或CCleaner,但我公司中的大多数用户(7万名员工)不是开发人员,也没有该软件。

是否有一个真正的解决方案,以使IE像我想的那样工作?

pdf internet-explorer caching browser-cache expires-header

6
推荐指数
1
解决办法
7234
查看次数

为角度应用程序缓存资产文件夹中的静态文件(图像、pdf、png 等)?

我们的应用程序是使用 angular-cli(版本:7.0.2)和 angular(版本:7.0.0)开发的。我们的图像文件很少,pdf 保存在资产文件夹中。每 3 个月发布一次应用程序的每个版本,这些文件都会发生变化。

  • 为资产文件夹中的所有文件实现缓存破坏的最佳方法是什么?
  • 是否有一种通用技术可以添加到客户端应用程序以在访问时加载资产文件夹中所有文件中的最新文件?webpack.config.js(使用angular-cli工具创建项目时生成的文件)中是否可以添加任何配置?

我通读了此链接中提到的各种技术:使用同一网址中的新图片刷新图片

不确定哪个是最好的解决方案。任何关于如何实现缓存破坏的建议/代码片段表示赞赏。

browser-cache webpack angular-cli angular angular7

6
推荐指数
1
解决办法
3454
查看次数

如何在受登录保护的Intranet中打开IE打开的Office文档中进行编辑?

问题

我正在Intranet上工作,并且使用IE可以打开本地Office安装的文档存在一些问题。

我使用以下锚标记为用户提供文件:

<a target="_blank" download="{{fileName}}" href="{{filePath}}">
Run Code Online (Sandbox Code Playgroud)

当用户单击此链接时,IE会为用户提供打开或保存它的决定。如果用户选择打开文件,然后决定他/她想要编辑文件,则他们在Office应用程序顶部单击“启用编辑”。这给用户一个错误,因为Office应用程序无法连接到站点并获取用户要编辑的文件。

Office应用程序名称无法连接到(我的文件)...

我要做的是让用户编辑他们在网上找到的文档的副本。然后他们可以保存副本,然后重新上传。

我认为问题之一是文件受登录保护。也许Intranet正在SSL上运行。

研究

在研究问题的解决方案时,我从Microsoft找到了此支持页面,页面讨论了我正在经历的事情。他们在错误消息三中写道:

Office应用程序名称无法打开文件。

就我而言,我得到的信息是:

Office应用程序名称无法连接到(我的文件)...

几乎相同,Microsoft写道,一个问题可能是:

当Internet Explorer通过SSL与安全网站通信时,Internet Explorer会强制执行任何无缓存请求。如果存在一个或多个标题,则Internet Explorer不会缓存该文件。因此,Office无法打开该文件。

这让我开始思考,然后我开始研究此问题,找到StackOverflow页面,例如“如何为每个文件夹配置静态内容缓存...”“利用IIS中的浏览器缓存”。我还检查了《 IIS.net配置参考》,以查看此处是否有任何可以帮助我解决问题的内容。

我认为主要的问题是,打开文件时,该文件未保存在本地,因此Office应用程序无法对其进行编辑。到目前为止,我认为解决此问题的方法是删除无缓存头,而对文件使用某种短缓存,以便浏览器强制下载该文件。

我尝试过的

缓存控制

我尝试了链接的前两篇SO文章中的技术,尝试在web.config中设置静态文件的缓存,但是强制缓存没有任何改变(当我询问时,我使用此技术来确保缓存控件正确无误文件)。Office应用程序仍尝试从其无权访问的网页打开文件。

内容配置

我尝试的另一件事是强制Internet Explorer下载该文件。完全删除该选项以将其打开。Microsoft也有关于它的支持页面。但这似乎没有用。在Global.asax中,我尝试了以下代码(只是看是否可以使Word文件正常工作):

<script runat="server">
    void Application_PreSendRequestHeaders(Object sender, EventArgs e) {
        Response.Headers.Set("Content-Type", "application/ms-word");
        Response.Headers.Set("Content-Disposition", "attachment; filename=fname.ext");
    }
</script>
Run Code Online (Sandbox Code Playgroud)

但这只会使Internet Explorer尝试下载我尝试访问的所有页面。

对文件禁用身份验证控制

我们总是检查用户是否确实有权访问所请求的文件。我们不希望人们窥探其他文件。禁用此检查将导致所有Office应用程序都可以在用户要编辑文件时打开文件。但这是一个糟糕的解决方案,并且带来了很多安全问题。

问题

所以我的问题是,“如何启用在IE中从受登录保护的Intranet打开的Office文档中进行编辑?” 如果与缓存有关,那么我该如何解决?当用户选择“打开”文件时,是否可以通过某种方式告诉IE保存本地副本,以及如何告诉Office应用程序查找文件的本地缓存版本,而不是尝试从中下载文件?服务器?

更新资料

我将问题缩小为Office应用程序的身份验证。当我单击Office应用程序中的“启用编辑”按钮时,该应用程序正在尝试下载文件,以便它可以编辑文件。然后,该请求被服务器拒绝(服务404),因为Office应用程序未登录,并且没有任何类型的cookie来告知服务器实际上确实可以访问该文件。这导致用户收到一条消息,通知用户无法打开请求的文件。

.net c# iis internet-explorer ms-office

5
推荐指数
1
解决办法
1363
查看次数

IIS - 为每种文件类型设置缓存控制头

我想为我的js,css和html文件设置不同的缓存控制头值.我知道在每个文件夹的基础上设置它的选项,但我的应用程序在同一文件夹中有html和js文件.

它甚至可以在IIS中使用吗?

iis

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

Sitecore 8:利用浏览器缓存

对于我的网站,Google PageSpeed Insights 建议更改某些可缓存资源的过期值,例如 .css、.js、.svg、google api、siteimprove。为上述文件设置过期值是否可行?如果是,那么需要什么配置?

caching sitecore browser-cache sitecore8

4
推荐指数
1
解决办法
1107
查看次数