ASP.NET 코어: HTTP 헤더를 사용하여 캐시 정적 파일 추가

10439 단어 csharpdotnetcoredotnet
이 문서에서 Asp에서 정적 파일에 캐시 컨트롤 헤더를 추가하는 방법을 설명하고 지도할 것입니다.순핵심.이것은 최종 사용자의 브라우저에서 정적 파일을 캐시하는 데 도움을 주는 기술로 두 번째 요청부터 서버에서 요청할 필요가 없고 브라우저의 캐시 디스크에서 얻을 수 있으며 웹 사이트를 불러오는 시간을 늘리는 데 도움이 된다.
  • 캐시 유형: 캐시 클라이언트, CDN, 최종 사용자의 메모리 브라우저에서 캐시...
  • 데이터 캐시: 이미지, css, js 등 정적 파일만 있습니다.
  • 유용한 사례: 두 번째 재방문 페이지에서 왔다.
    좋습니다. Asp에서 HTTP 헤더를 사용하여 정적 파일 캐시 제어를 테스트합니다.net Core 두 번째 요청부터 페이지를 불러오는 시간을 보기 위해 50개의 큰 그림을 포함하는 예시를 만들 것입니다.

    1. 환경 설정 및 프로젝트 만들기


  • Visual studio 2019
  • Asp.Net Core 2.0, 2.1, 2.2, 3.0.3.1본문에서 나는 3.1판으로 예를 하나 만들었다.
    자, 이제 vs2019를 열고 웹 응용 프로그램 프로젝트를 만들어서 예를 들겠습니다.
    첫걸음vs2019-> 오른쪽에 있는 새 항목 옵션을 엽니다.
    두 번째 단계.ASP를 선택합니다.NET 핵심 웹 응용 프로그램 항목 유형을 선택하고 다음 버튼을 클릭합니다.
    세 번째.항목 이름을 입력하고 [만들기] 버튼을 클릭합니다.
    네 번째 단계.웹 응용 프로그램으로 항목 유형을 선택하고 [만들기] 버튼을 클릭합니다.

    2. 성능 로드 기본값 테스트


    현재, 나는 웹 페이지에 50개의 큰 그림을 표시하고, 첫 번째 그림과 두 번째 그림의 성능을 시험할 것이다. 
    이것은 나의 홈페이지입니다. 50장의 사진이 있습니다.

    기본적으로 캐시 제어는 정적 파일의 헤더 응답에 추가할 수 없습니다.창설된 프로젝트를 완성하면 StartUp.cs 파일과 Configure() 방법의 내부를 열 수 있습니다. 중간부품 UseStaticFiles() 이 기본값을 프로젝트에 추가하는 것을 볼 수 있습니다. 
     
  • UseStaticFiles(): 현재 요청 경로에 정적 파일 서비스를 활성화합니다.기본적으로 루트 정적 폴더는 wwwroot입니다.그래서 이 폴더에 모든 정적 파일을 넣어야 합니다.
     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    ……..
    app.UseStaticFiles();
    ……..
    } 
    Now, we run applications and check web page time load with developer tools.


    With default mode, load time is 1.17s with 59 requests to transfer 5.3MB data from server to client. I think it is too heavy and too slow. We can check the header response of an image you can see as below: 

     accept-ranges: bytes
    content-length: 42182
    content-type: image/jpeg
    date: Fri, 25 Sep 2020 16:37:29 GMT
    etag: "1d69283ade7ff46"
    last-modified: Thu, 24 Sep 2020 15:02:11 GMT
    server: Microsoft-IIS/10.0
    status: 200
    x-powered-by: ASP.NET

    You can see it can not be cached here.

    3. 캐시 HTTP 헤드를 사용하여 성능 테스트

    To enable Cache-Control in Asp.Net Core for all static files we need to add cache-control to the header response of each static file.

    Step 1. Enable cookie policy.

    Open StartUp.cs file, inside the method Configure() we need to register the middleware cookie policy as below:

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    -------
    app.UseCookiePolicy();
    -------
    }

    Step 2. Add Cache-Control to the HTTP header of the static file.

    To add cache-control to the response header of each response static file we need to custom middleware UseStaticFiles() as below:

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    --------------
    app.UseStaticFiles(new StaticFileOptions
    {
    OnPrepareResponse = context =>
    {
    // add time expires header
    const int durationInSeconds = (60 60 24) * 365; // Expires time. I set to 1 year
    context.Context.Response.Headers["Cache-Control"] =
    "public,max-age=" + durationInSeconds;
    }
    });
    --------------
    }

     </span>
    
    다음과 같은 이점을 제공합니다.Max-age :
    Time expires cache, 이 초 후에 이 자원은 서버에 호출되어 자원 파일을 다시 불러옵니다.Cache-Control: Public  
    public response 명령은 모든 캐시에서 자원을 캐시할 수 있음을 나타냅니다.js, css, 이미지 같은 자원이 업데이트되지 않았거나 거의 업데이트되지 않았을 때 이 옵션을 사용하십시오.Cache-Control: Private이 옵션은 모든 정적 파일이 최종 사용자의 로컬 메모리에 저장된다는 것을 나타냅니다.Cache-Control: No-Cache응답은 일반적으로 캐시할 수 없는 경우에도 모든 캐시로 저장할 수 있습니다.그러나 저장된 응답은 사용하기 전에 원본 서버의 검증을 통과해야 하기 때문에 NoCache와immutable를 결합해서 사용할 수 없습니다.응답을 캐시에 저장하지 않으려면 no store를 사용합니다.이 명령은 응답을 캐시에 저장하는 것을 효과적으로 방지할 수 없습니다.Cache-Control: No-Store이 옵션은 브라우저에 캐시 응답을 허용하지 않으며, 응답을 요청할 때마다 서버에서 응답을 추출해야 한다는 것을 알려 줍니다.이 설정은 보통 개인 은행의 상세한 정보와 같은 민감한 데이터에 사용된다.
    두 번째 요청의 결과입니다.

    와, 여전히 59개의 요청, 5.5MB의 자원이 있지만, 현재 우리는 5.3MB가 아니라 34.2kb의 전송을 하고 있으며, 시간부하는 442ms이며, 위의 1.17s가 아니다.속도가 너무 빨라서 페이지를 불러오는 속도가 ~3배가 넘는다.
    캐시 제어가 있는 정적 파일의 응답 헤더입니다.

    기타 정보는 캐시 제어를 사용할 때 Etag, If-Match, If-None-Match 헤더를 알아야 한다고 생각합니다.그 중 세 가지 옵션은 정적 파일 캐시를 최적화하는 데 도움이 될 것이다.ETag - 응답 헤더의 일종으로 하나의 태그(인용부호의 문자열, 예를 들어'0987656af37gfe98-ttgv4')에 따라 서비스 내용을 표시하는 버전으로 이 태그는 자원 수정 후 변화가 발생할 수 있다.요청을 보내기 전에 영패가 변경되지 않으면 브라우저는 로컬 버전을 계속 사용할 것입니다.
    너는 Mozilla 에서 더 많은 내용을 읽을 수 있다

    4. 요약


    이 문서에서 Asp를 사용하는 방법에 대해 설명합니다.Net Core 캐시 제어 헤드?봐봐. 왜 얘가 중요해?이것은 구글의 페이지 속도를 높이는 중요한 부분이다.액세스 사이트에 비해 캐시 제어 헤드는 사용자 체험을 향상시키는 데 도움이 된다. 
    소스 코드를 다운로드하여 참조할 수 있습니다here.
    당신은 here의 원시 문장을 읽을 수도 있고, 다른 과학 기술 문장을 찾을 수도 있으며, 그 중에서 일부test programming skills를 얻을 수 있습니다.
    해피 코드!!! 
  • 좋은 웹페이지 즐겨찾기