programing

IIS7에서 eTag 헤더를 제거하려면 어떻게 해야 합니까?

lovejava 2023. 7. 3. 22:29

IIS7에서 eTag 헤더를 제거하려면 어떻게 해야 합니까?

고성능 웹 사이트에 대한 Yahoo의 모범 사례에 따라 머리글에서 Etags를 제거하고 싶습니다(모든 캐싱을 수동으로 관리하고 있으므로 Etags가 필요하지 않습니다...농장으로 확장해야 하는 경우에는 정말로 그들이 사라졌으면 합니다.)Windows Server 2008에서 IIS7을 실행하고 있습니다.내가 이걸 어떻게 하는지 아는 사람?

IIS7에서 Etag 변경 번호(Etag 다음 부분: )는 항상 0으로 설정됩니다.

따라서 서버의 Etag는 동일한 파일에 대해 서버마다 더 이상 달라지지 않으므로 Yahoo 모범 사례가 더 이상 적용되지 않습니다.

IIS7에서 ETag 헤더를 실제로 억제할 수 없기 때문에 전혀 조작하지 않는 것이 가장 좋을 것입니다.지금까지 가장 유용한 구성 규칙은 "기본값이 무엇인가를 손상시키지 않는 경우, 그대로 두십시오."라는 것입니다.

web.config에서 이 작업을 수행하면 IIS7에서 ETag를 비활성화할 수 있다고 생각할 수 있습니다.하지만 탐지기 추적을 통해 어쨌든 ETag가 내려왔다는 것을 확인할 수 있습니다.

<httpProtocol>
    <customHeaders>
        <remove name="ETag" />
    </customHeaders>
</httpProtocol>

공백을 사용하는 것도 효과가 없습니다.어쨌든 ETAG는 다운됩니다.

<httpProtocol>
    <customHeaders>
        <add name="ETag" value="" />
    </customHeaders>
</httpProtocol>

다른 사이트에서 제안한 것처럼 ETag를 빈 따옴표로 설정하는 것은 작동하지 않습니다.

<httpProtocol>
    <customHeaders>
        <add name="ETag" value="&quot;&quot;" />
    </customHeaders>
</httpProtocol>

많은 ETAG가 전송됩니다.

ETag: "8ee1ce1acf18ca1:0","

결론적으로, 제가 시도하거나 생각할 수 있는 어떤 것도 적어도 사용자 지정 모듈을 작성하지 않고 IIS7에서 ETAG를 죽일 수 없습니다.

저는 이것을 처리하기 위해 커스텀 http 모듈을 작성했습니다.말처럼 그렇게 나쁘지는 않아요.코드는 다음과 같습니다.

using System;
using System.Web;

namespace StrongNamespace.HttpModules
{
    public class CustomHeaderModule : IHttpModule
    {
        public void Init(HttpApplication application)
        {
            application.PostReleaseRequestState += new EventHandler(application_PostReleaseRequestState);

        }

        public void Dispose()
        {
        }

        void application_PostReleaseRequestState(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Headers.Remove("Server");
            HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
            HttpContext.Current.Response.Headers.Remove("ETag");
        }
    }
}

다음은 web.config 변경 사항입니다.

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <remove name="X-Powered-By"/>
            </customHeaders>
        </httpProtocol>
        <modules>
            <add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule"/>
        </modules>
    </system.webServer>
</configuration>

저는 이것이 오래된 질문이라는 것을 알지만, 해결책을 찾다가 우연히 발견했습니다.는 이 질문에 대해 제가 올린 합리적인 답변을 찾은 것 같습니다.

이 문제가 발생했으며 IIS 7에서 빈 사용자 지정 ETAG 헤더를 설정하는 것조차 일부 파일(예: 이미지 파일)에 대해 작동하지 않았습니다.우리는 ETAG 헤더를 명시적으로 제거하는 HttpModule을 만들었습니다.

업데이트: 사용자 @ChrisBarr 덕분에 URL Rewrite Module 요구 사항이 추가되었습니다.

iis 6에서는 'ETAG'에 대한 사용자 정의 헤더를 쉽게 추가할 수 있습니다. = "

IIS 7에서 이 스레드를 읽고 사용자 지정 http 모듈을 사용하지 않고는 불가능하다는 것을 확인한 후 Microsoft의 URL Rewrite 모듈을 설치하고 다음과 같이 아웃바운드 다시 쓰기 규칙을 추가할 수 있습니다.

<outboundRules>
  <rule name="Remove ETag">
    <match serverVariable="RESPONSE_ETag" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>

이것은 실제로 작동하며 사용자 지정 http 모듈(dll)이 필요하지 않습니다.시스템 잠금 해제.웹 서버 구성 섹션 및 사용자 정의 설정헤더 등이 작동하지 않습니다. 적어도 제가 시도한 모든 경우에 해당합니다.단순 아웃바운드 다시 쓰기 규칙이 적용됩니다.

그런데, iis8을 사용하면 간단합니다.

<element name="clientCache">
   <attribute name="cacheControlMode" type="enum" defaultValue="NoControl">
          <enum name="NoControl" value="0" />
          <enum name="DisableCache" value="1" />
          <enum name="UseMaxAge" value="2" />
          <enum name="UseExpires" value="3" />
  </attribute>
  <attribute name="cacheControlMaxAge" type="timeSpan" defaultValue="1.00:00:00" />
  <attribute name="httpExpires" type="string" />
  <attribute name="cacheControlCustom" type="string" />
  <attribute name="setEtag" type="bool" defaultValue="true" />
</element>

IIS 8.0: ETag 사용 여부

http://www.jesscoburn.com/archives/2008/10/02/quickly-configure-or-disable-etags-in-iis7-or-iis6/ 에는 멋진 화보 가이드가 있습니다.

기본적으로 ETag라는 사용자 정의 응답 헤더를 생성하고 해당 값을 비워 둡니다.

iis6, iis7 및 iis7.5에서 Etag http 헤더를 완전히 제거하는 방법에 대한 이 블로그 게시물을 확인하십시오.

http://lightspeednow.com/blog/2010/05/21/iis-tutorial-how-to-completely-remove-etags-entity-tags-from-iis6-iis7-and-iis7-5/

사용했습니다.removeetag.dllhttp://www.caspianit.co.uk/iis7-etag-problem/ 에서 찾을 수 있고 완벽하게 작동했습니다.

당신에게도 잘 되길 바랍니다.

IIS 7에서는 IIS 구성 번호가 항상 0으로 설정되므로 더 이상 태그에 대해 걱정할 필요가 없습니다.

동일한 팜에 IIS6 및 IIS7 웹 서버가 있는 경우에도 문제가 있습니다.이 경우 IIS6 구성 번호를 이 문서에 설명된 대로 수동으로 0으로 설정해야 합니다.

Etags는 실제로 스택 오버플로처럼 파일 이름을 변경할 필요가 없기 때문에 매우 유용합니다(예: default.css?1234).default.css 파일을 변경하면 etag가 변경되므로 이후 요청 시 캐시가 아닌 서버에서 파일을 가져옵니다.

이것이 효과가 있을 것 같습니다.제거와 공백은 작동하지 않습니다.

    <configuration>
     <system.webServer>
       <httpProtocol>
          <customHeaders>
            <add name="ETag" value=" " /> 
          </customHeaders>
        </httpProtocol>
       </configuration>
     </system.webServer>

언급URL : https://stackoverflow.com/questions/477913/how-do-i-remove-etag-headers-from-iis7