programing

ASP.net HTTP 404 - MaxRequestLength 예외 대신 파일을 찾을 수 없음

i4 2023. 8. 9. 20:31
반응형

ASP.net HTTP 404 - MaxRequestLength 예외 대신 파일을 찾을 수 없음

웹 페이지에 파일 업로드 컨트롤이 있습니다.됩니다.maxRequestLength = 8192. 도 있습니다 파일이 4MB 이상이면 오류가 발생하는 서버 검증도 있습니다.구성에 8MB가 포함된 이유는 사용자에게 제공되는 이점과 애플리케이션을 테스트할 수 있기 때문입니다.

9MB 파일을 업로드하면 Maximum request length exceeded.라는 예외가 발생하는데, 이는 정상이고 예상대로 작동합니다.그러나 1GB 파일을 업로드하려고 하면 HTTP 404 - File not found(파일을 찾을 수 없음)라는 메시지가 나타납니다.누가 왜 이런 일이 발생하는지, 그리고 어떻게 하면 maxRequestLength 예외를 발생시킬 수 있는지 설명해 주시겠습니까?

IIS6를 사용하고 있습니다.

오늘(IIS 7을 사용한 대용량 파일 업로드 시 HTTP 404) 이러한 상황이 발생했지만 구성 설정이 모두 정확하다고 생각했습니다.300MB까지 파일을 업로드하고 싶어서 애플리케이션의 하위 폴더에 다음 web.config 설정을 만들었습니다.

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="307200" />
    </system.web>
    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="314572800" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

이 구성은 테스트에서 작동했지만 web.config를 포함하여 업데이트된 파일을 프로덕션 서버에 복사했을 때 90MB 파일을 업로드할 때 HTTP 404 오류가 발생했습니다.30MB의 애플리케이션 범위 제한 하에 있는 작은 파일들은 잘 작동하고 있어서, 저는 그것이 어떤 종류의 요청 크기 문제라는 것을 알았습니다.

IIS가 일부 응용 프로그램 설정을 캐시했지만 업데이트하지 않았을 가능성이 있다고 판단하여 응용 프로그램 풀을 재활용한 후 모든 것이 예상대로 작동했습니다.

404를 받는 이유를 설명해주는 답은 아무 것도 없다고 생각합니다. 문제를 해결하는 방법에 대한 일반적인 내용을 알려줄 뿐입니다.

404는 잘못된 구성으로 인한 것이 아니라 의도적이고 문서화된 동작입니다.

HTTP 요청이 요청 제한을 초과하기 때문에 요청 필터링이 HTTP 요청을 차단하면 IIS 7은 HTTP 404 오류를 클라이언트에 반환하고 요청이 거부된 이유를 식별하는 고유 하위 상태로 다음 HTTP 상태 중 하나를 기록합니다.

HTTP 하위 상태 설명
404.13 콘텐츠 길이가 너무 큼404.14 URL이 너무 깁니다.404.15 쿼리 문자열이 너무 깁니다.

이러한 하위 상태를 통해 웹 관리자는 IIS 로그를 분석하고 잠재적 위협을 식별할 수 있습니다.

이 "" " " " " 에서 <headerLimits>에 반환하고 상태는 과 같습니다. IIS 7은 HTTP 404 오류를 반환합니다.

HTTP 하위 상태 설명
404.10 요청 헤더가 너무 깁니다.

이것은 조금 오래된 스레드이지만, 저는 이것으로 제 경험을 더해야겠다고 생각했습니다.

저는 대용량 파일 업로드와 웹 API에서도 같은 문제에 직면했습니다.404.13은 컨트롤러에 도달하기 전에 던져집니다. 그래서 저는 어디에 뛰어들어 이 사건을 처리해야 하는지 알아내야 했습니다.

제 솔루션은 다음 web.config 항목이었습니다.

저는 404.13을 mvc 컨트롤러로 리디렉션하여 처리합니다(똑같이 웹 양식 페이지일 수 있음). 그리고 일반적인 404 오류가 제 404 경로에 발생합니다.404.13의 경우 응답 모드="리다이렉트"가 중요합니다.

<httpErrors errorMode="Custom">
  <remove statusCode="404" subStatusCode="-1" />            
  <error statusCode="404" subStatusCode="13" path="/errors/filesize" responseMode="Redirect" />
  <error statusCode="404" path="/errors/notfound" responseMode="ExecuteURL" />      
</httpErrors>

그러면 오류 컨트롤러에 다음이 표시됩니다.

public ActionResult FileSize()
{
    Response.StatusCode = 500;
    Response.StatusDescription = "Maximum file size exceeded.";
    Response.End();
    return null;
}

다시 말하지만, 일반 웹 양식 페이지일 수 있습니다.

제가 알기로는 IIS의 "maxRequestLength" 설정을 초과하는 것을 정상적으로 처리할 수 있는 방법이 없습니다.응답할 HTTP 코드가 없기 때문에 사용자 지정 오류 페이지도 표시할 수 없습니다.이 문제를 해결할 수 있는 유일한 방법은 maxRequestLength를 터무니없이 높은 바이트 수(예: 51200(50MB)로 설정한 다음 파일이 업로드된 후 ContentLength를 확인하는 것입니다(요청이 90초 전에 시간 초과되지 않았다고 가정).그 시점에서 <=5MB 파일인지 확인하고 친근한 오류를 표시할 수 있습니다.

링크를 사용해 볼 수도 있습니다.

다음과 같은 방법을 사용할 수도 있습니다.

private void application_EndRequest(object sender, EventArgs e)
{
    HttpRequest request = HttpContext.Current.Request;
    HttpResponse response = HttpContext.Current.Response;

    if ((request.HttpMethod == "POST") &&
        (response.StatusCode == 404 && response.SubStatusCode == 13))
    {
        // Clear the response header but do not clear errors and transfer back to requesting page to handle error
        response.ClearHeaders();
        HttpContext.Current.Server.Transfer(request.AppRelativeCurrentExecutionFilePath);
    }
}

URLscan 도구가 사이트에 설치되고 실행될 때 IIS7(및 IIS6으로 추정)에서도 이 문제가 발생할 수 있다는 것을 알게 되었습니다.

웹 사이트에 파일을 업로드할 때 "File or directory not found(파일 또는 디렉토리를 찾을 수 없습니다)"라는 메시지를 받았습니다.찾으려는 리소스가 제거되었거나 이름이 변경되었거나 일시적으로 사용할 수 없습니다."

URLscan에 의해 문제가 발생한 경우 호스팅 서버 자체에서 사이트를 탐색하는 동안 대용량 파일을 사이트에 업로드하려고 하면 URLscan을 언급하는 404 대신 전체 asp.net 오류 메시지가 표시됩니다.IIS의 웹 사이트에 대한 ISAPI 필터를 확인하여 IIS7의 사용자 사이트에서 URLscan이 실행 중인지 확인할 수도 있습니다. URLscan은 사용되는 경우 나열됩니다.

이 문제는 URLscan의 ini 파일을 "%WINDIR%\"에 위치하도록 변경하여 해결할 수 있습니다.시스템32\Inetsrv\URLscan"을 선택하고 MaxAllowedContentLength를 변경합니다.MaxAllowedContentLength는 바이트 단위입니다.

IIS7을 사용하여 직접 시도했을 때는 그렇지 않았지만 IIS를 다시 시작해야 적용할 수 있습니다.

http://www.iis.net/learn/extensions/working-with-urlscan/urlscan-overview

http://www.iis.net/learn/extensions/working-with-urlscan/common-urlscan-scenarios

IIS 자체에서 기본 오류 페이지를 구성할 수 있습니다.

요청 제한은 IIS 설정입니다.IIS에서 사이트의 요청 필터링 섹션을 열고 요청 설정 편집을 선택합니다.저에게 그것은 그렇게 간단했습니다.

Microsoft의 보다 자세한 사용 방법.

https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/ #편집 방법-요청-수정-기능-수정-요청-수정

나는 방금 같은 문제를 만났다, 나는 유사 코더의 답변과 같은 유사한 작업을 했지만 (아마도 캐시가 아닐 것이라고 생각합니다):

  1. Web.config --> maxRequestLength 편집

    <system.web>
    <httpRuntime maxRequestLength="1073741824" executionTimeout="3600" />
    </system.web>
    
  2. 편집 내용:

    <security>
          <requestFiltering>
            <requestLimits maxAllowedContentLength="1073741824" />
          </requestFiltering>
    </security>
    

이렇게 해서 한번 해보세요.

1GB 업로드의 문제는 브라우저와 더 관련이 있습니다.저는 이 문제로 많은 어려움을 겪었고 많은 솔루션을 시도했지만, 여기서 질문해야 할 것은 실제 비즈니스 요구사항에서 이러한 일이 발생할 가능성이 얼마나 되는지, 비즈니스 규칙이나 비기능적 요구사항 문서에 알려진 문제로 기록해야 한다는 것입니다.

언급URL : https://stackoverflow.com/questions/4731295/asp-net-http-404-file-not-found-instead-of-maxrequestlength-exception

반응형