customErrors와 httpErrors의 차이점은 무엇입니까?


168

ASP.NET MVC 응용 프로그램에서 web.config 파일의 섹션 customErrorshttpErrors섹션의 차이점은 무엇입니까 ?

각 섹션을 사용하기위한 지침은 무엇입니까?


1
IMHO-HttpError는 오류 메시지에 대한 IIS 수준 처리이며 CustomError는 웹 응용 프로그램의 오류에 대한 ASP.Net 처리입니다. 그러나 더 알고 싶어요 ...
Sunny

답변:


85

면책 조항 : 이것은 내 경험에 의한 것이며 입증 된 사실은 아닙니다.

둘 다 웹 사이트의 오류 처리를 정의하는 데 사용되지만 소프트웨어마다 다른 구성 요소를 나타냅니다.

customErrors Visual Studio Development Server (일명 VSDS 또는 Cassini)에서 사용하는 레거시 (뒤로 호환 가능) 요소입니다.

httpErrors IIS7에서만 사용되는 새로운 요소입니다.

이는 로컬 IIS 대신 VSDS를 사용하는 동안 ASP.NET 웹 사이트를 개발할 때 발생할 수있는 문제를 강조합니다 .

또한 오류 출력을 완전히 제어하려면 IIS7에서 오류 메시지를 처리하는 방법 에 대해이 게시물을 직접 참조하십시오 .

요약:

  • 에서 개발 VSDS사용 -customErrors
  • IIS6사용할 사이트 공개customErrors
  • IIS7사용할 사이트 공개 httpErrors.

와 함께 개발 VSDS하지만에 게시하면 IIS7둘 다 필요하다고 생각합니다.


30
customErrors는 asp.net에 대한 것입니다. httpErrors는 IIS7에 대한 것이므로 .net 핸들러를 통과하지 않는 컨텐츠 (예 : .png, .js 등)를 처리하십시오. .net이 아닌 컨텐츠 유형에 대한 오류 페이지를 원하면 IIS 오류 페이지 (IIS7의 httpErrors)를 사용하십시오. , IIS6 용 UI.)
zcrar70 8:24의

4
디버깅 목적으로 Visual Studio와 함께 IIS 7 Express를 설치하고 사용하는 것이 좋습니다. Cassini와 달리 일반 IIS 7과 동일한 구성 옵션을 사용합니다.
Sean

더 이상 @johnB의 customErrors를 사용할 필요가 없습니다. 그리고 너무 필요합니까? 1.) "ASP"섹션에서 "브라우저에 오류 보내기"를 활성화하십시오. "오류 페이지 / 기능 설정 편집"아래 의 디버깅 속성 2.) 에서 "상세 오류"를 선택하십시오. 3.) IE stackoverflow.com/questions/2640526/…
Kiquenet

136

* 2016 년 4 월 업데이트

customErrors 속성은 .net 코드가 예외 (404, 403, 500 등)를 발생시킬 때 사용되며 httpErrors 속성은 IIS 자체가 예외를 발생시킬 때 사용됩니다.

  • / myfakeextensionslessurl-> httpErrors 404
  • /myfakeaspsx.aspx-> customErrors 404
  • /myfakeimage.jpg-> httpErrors 404
  • /throw500.apx-> customErrors 500
  • / throw500-> customErrors 500

이것을 올바르게 구성하려는 함정이 많이 있습니다. 따라서 빠른 예를 찾고 있다면 가장 좋은 두 가지 옵션이 있습니다.

예 1 : html 페이지 사용

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.html" />
    <error statusCode="404" redirect="/Error404.html" />
    <error statusCode="500" redirect="/Error500.html" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="File" path="Error403.html" />
    <error statusCode="404" responseMode="File" path="Error404.html" />
    <error statusCode="500" responseMode="File" path="Error500.html" />
  </httpErrors>
</system.webServer>

예 2 : aspx 페이지 사용

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.aspx" />
    <error statusCode="404" redirect="/Error404.aspx" />
    <error statusCode="500" redirect="/Error500.aspx" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
    <error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
    <error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
  </httpErrors>
</system.webServer>

그리고 aspx 오류 페이지에서 다음과 같은 작업을 수행해야합니다 (예 : 404 페이지).

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

참고 : customErrors 섹션에서 더 적은 URL을 사용하는 것은 불가능합니다! . (해킹없이)

해결 방법 중 하나는 사용자 정의 오류를 비활성화하고 http 오류가 사용자 정의 페이지를 처리하도록하는 것입니다. 친구가 그러한 설정을 만들었습니다. 시간을 찾으면 코드를 공유합니다.

배경

좋은 맞춤 오류 페이지는 다음과 같습니다.

  1. 로컬로 문제점 페이지를 방문 할 때 실제 예외 표시
  2. 문제 페이지를 원격으로 방문하면 사용자 정의 페이지 표시
  3. 리디렉션하지 않지만 오류 페이지 내용을 표시합니다 (서장 이유로 인해).
  4. 올바른 상태 코드를 표시합니다

우리 설정에서 몇 가지 옵션을 명확히하기 위해 :

  1. <customErrors mode="RemoteOnly". 당신은 여기에 지정할 수 있습니다 On, Off, RemoteOnly.

    • On = 항상 사용자 정의 오류 페이지 표시
    • Off = 항상 실제 오류 표시
    • RemoteOnly= 오류를 로컬로 표시하지만 사용자 정의 오류 페이지를 원격으로 표시합니다. 그래서 우리 RemoteOnly는 진술 1 을 원합니다
  2. <customErrors redirectMode="ResponseRewrite". 여기에서 지정할 수 있습니다 : ResponseRedirect또는 ResponseRewrite. ResponseRedirect모드는 사용자 지정 오류 페이지에 오류 페이지를 리디렉션합니다. 링크 크롤러 (SEO)의 경우 302-> 500이 발생하지만 링크 크롤러에서 500 오류가 발생합니다.

  3. <httpErrors errorMode="DetailedLocalOnly". 이것은 customErrors모드 와 같습니다 . 옵션 당신이 가지고 : Custom, Detailed, DetailedLocalOnly.

나에게 많은 도움이 된 좋은 블로그 게시물은 다음과 같습니다. http://benfoster.io/blog/aspnet-mvc-custom-error-pages


어떤 종류의 관계 customErrors- ASP의 "오류를 브라우저로 보내기" 와 같은 httpErrors 및 IIS 구성 -디버깅 속성"오류 페이지 / 기능 설정 편집", "상세한 오류". ? stackoverflow.com/questions/2640526/…
Kiquenet

36

<customErrors><httpErrors>


<customErrors>

  • IIS7 +에서도 여전히 사용 가능
  • ASP.NET에서 처리 한 요청에 대한 사용자 지정 오류 페이지를 지정합니다.
  • ASP.NET 응용 프로그램 내에서만 요청을 처리
  • HTML 파일 또는 디렉토리 ( "친숙한") URL과 같은 정적 파일은 처리되지 않습니다.

<httpErrors>

  • IIS7에 도입
  • IIS에서 처리 한 요청에 대한 사용자 지정 오류 페이지를 지정합니다.
  • ASP.NET 응용 프로그램 내의 요청 처리 및 / 또는 ASP.NET 응용 프로그램 외부의 요청 처리
  • 모든 파일과 URL이 처리됩니다 *

참고 : 더 이상 사용할 필요가 없습니다 customErrors

인용 출처 : ASP.NET의 사용자 지정 404 및 오류 페이지 (우수 기사)


ExecuteURL.aspx 페이지와 같은 동적 콘텐츠를 제공합니다 ( path값은 서버 상대 URL 이어야 함 ).

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
  </httpErrors>
</system.webServer>

File .html 페이지와 같은 사용자 정의 오류 파일을 제공합니다.

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

참조 : HTTP 오류 (www.iis.net)

자세한 내용은 위의 www.iis.net 링크를 참조하십시오


아마도 ** stackoverflow.com/questions/2640526/… ** httpErrors"브라우저에 오류 보내기"오류 페이지
Kiquenet

3
참고 it's no loger necesary to use customErrors및 인용 +1 , 이것은 실제로 다음에 온 정보입니다 :-)
Myster

4

웹 구성의 오류 섹션은 사용자 정의 http 오류 처리 방법을 제공하기위한 것으로, system.web 섹션에있는 customErrors 섹션과 system.webServer 섹션에있는 다른 httpErrors 섹션이 있습니다 (아래 참조).

customErrors : 이 섹션은 IIS 7, IIS 6 5가 도입되기 전과 http 상태 코드에 따라 사용자 지정 http 오류를 처리하기 위해이 섹션을 완전히 사용하기 전에 사용되었습니다.

httpErrors : IIS 7 이상은 이 섹션과 customErrors 섹션을 사용하여 index.aspx와 같은 ISAPI dll (.aspx, ashx, .asmx, .svc 등)에 요청한 페이지 확장명을 등록한 경우 파일 확장명을 기반으로 사용자 정의 http 오류를 처리합니다. customeErrors 섹션 에서 IIS 픽업 설정 그렇지 않은 경우 httpErrors 에서 설정 픽업 (IIS 7 호스트 모드는 클래식이 아닌 통합 된 분위기로 설정해야 함)

다음은 404 오류 처리 확인 링크에 대한 예입니다.

webconfig, iis, asp.net의 httperrors 및 customerrors

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.