IIS 7 retorna 304 em vez de 200

10

Eu tenho um problema estranho com o IIS 7.
Às vezes parece retornar um 304 em vez de um 200.

Aqui está uma solicitação de amostra capturada com o Fiddler:
(Observe que o arquivo solicitado ainda não está localizado no cache de meus navegadores.)

GET https://[mysite]/Content/js/jquery.form.js HTTP/1.1
Accept: */*
Referer: https://[mysite]/Welcome/News
Accept-Language: sv-SE
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: [mysite]
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ...

Observe que não há correspondência If-Modified-Since ou If-None-Match na solicitação.
Mas ainda assim a resposta é:

HTTP/1.1 304 Not Modified
Cache-Control: public
Expires: Tue, 02 Mar 2010 06:26:08 GMT
Last-Modified: Mon, 22 Feb 2010 21:58:44 GMT
ETag: "1CAB40A337D4200"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 01 Mar 2010 17:06:34 GMT

Alguém tem uma pista do que poderia estar errado aqui?

Estou executando o IIS 7 no Windows Web Server 2008 R2.

EDITAR:

Encontrei uma solução alternativa, ative o cache e, em seguida, desative-a em um nível de extensão. Foi o truque para mim.

<configuration>
  <system.webServer>
    <caching enabled="true" enableKernelCache="true">
      <profiles>
        <add extension=".png" policy="DisableCache" kernelCachePolicy="DisableCache" />
        <add extension=".gif" policy="DisableCache" kernelCachePolicy="DisableCache" />
        <add extension=".js" policy="DisableCache" kernelCachePolicy="DisableCache" />
        <add extension=".css" policy="DisableCache" kernelCachePolicy="DisableCache" />
      </profiles>
    </caching>
    <staticContent>
      <clientCache cacheControlMode="NoControl" />
    </staticContent>
  </system.webServer>
</configuration>
    
por Ola Herrdahl 01.03.2010 / 18:42

2 respostas

3

De acordo com a seção 14.9 da especificação HTTP1.1 , a diretiva no-cache para o cabeçalho Cache-Control é apenas imponível pelo servidor de origem, o que significa que o IIS está ignorando o cabeçalho em sua solicitação.

The cache-control directives can be broken down into these general categories:

  - Restrictions on what are cacheable; these may only be imposed

by the origin server.

A seção 14.9.1 define public , private e no-cache como as diretivas que restringem o que pode ser armazenado em cache, o que pode ser imposto apenas pelo servidor.

Se você não quiser que seu arquivo .js seja armazenado em cache, será necessário definir a diretiva no-cache no aplicativo (ou seja, o código ASP.NET) ou será necessário alterar o Cache-Control cabeçalho na solicitação para usar a diretiva no-store em vez de no-cache .

EDITAR:
Com base no seu comentário - sim, eu assumi que você não queria que o arquivo fosse armazenado em cache. O 304, então, pode estar vindo como resultado do arquivo estar em um dos caches internos do IIS. Dê uma olhada nestes:

por 01.03.2010 / 19:24
1

Eu tenho tido o mesmo problema por um tempo e tenho todo o cache desligado ... No entanto, instalei o módulo de compactação para IIS7 em algum ponto que, por padrão, tinha ativado a compactação de arquivos estáticos em meus sites existentes. Eu desliguei toda a compactação para os sites afetados e agora eles parecem estar funcionando bem touch wood .

    
por 04.06.2010 / 06:37