>  기사  >  웹 프론트엔드  >  요청이 항상 404인 이유는 무엇입니까?

요청이 항상 404인 이유는 무엇입니까?

伊谢尔伦
伊谢尔伦원래의
2016-11-21 13:45:522510검색

이번에는 404에 관한 몇 가지 내용에 대해 이야기해보겠습니다. 왜냐하면 공식 계정과 QQ 그룹의 백그라운드에서 사람들이 같은 질문을 하고 있기 때문입니다.

내 애플리케이션이 배포되었으며 백그라운드에서 시작할 때 비정상적인 출력이 보이지 않았습니다. Tomcat의 관리자에게 요청할 수 있지만 자체 애플리케이션을 요청하면 왜 항상 404가 반환됩니까?

네, 왜 그렇습니까?

이 문제에 대한 설명을 분석해 보겠습니다.

1. 애플리케이션이 배포되었으며 백그라운드에 비정상적인 출력이 없습니다.

2. 톰캣의 매니저 애플리케이션이 정상적으로 요청 가능

위의 두 점은 톰캣이 정상적으로 시작됨과 동시에 매니저 애플리케이션과 사용자 애플리케이션이 성공적으로 배포되었음을 알 수 있지만, 관리자의 요청이 정상이므로 자신의 애플리케이션도 정상적으로 요청할 수 있는지 확인할 수 없습니다.

결국 지원서에 있는 리소스는 관리자와는 아무런 관련이 없습니다. 실제로 요청하실 때 주소가 틀릴 수도 있습니다. 즉, webapps 디렉터리에 배포된 애플리케이션을 보고 있지만 브라우저의 요청은 항상 멈추지 않고 404를 반환합니다.

위 질문이 저희 기사의 주요 분석 내용입니다. 먼저 Wikipedia에 설명되어 있는 HTTP 요청 404의 상태 코드를 살펴보겠습니다.

HTTP 오류 메시지 404(찾을 수 없음)는 컴퓨터 네트워크 통신에서 클라이언트와 클라이언트를 식별하는 표준 응답 코드입니다. 서버가 통신할 수 있지만 서버는 클라이언트가 요청한 리소스를 찾을 수 없습니다.

Tomcat에서는 여러 상황에서 404가 반환됩니다.

이전 기사에서 언급했듯이 Tomcat에는

JspServlet, DefaultServlet이라는 두 가지 기본 서블릿이 포함되어 있습니다. (Tomcat은 정적 리소스에 어떻게 반응하나요?)

Tomcat에 존재하지 않는 리소스를 무작위로 요청하는 경우(예: 다음 두 가지 존재하지 않는 리소스)

http:// localhost: 8080/abc 및 http://localhost:8080/abcd.jsp

이때 위에서 언급한 두 개의 Servlet에 요청이 이루어집니다. 이때, 리소스가 존재하지 않으므로 404의 리턴은 우리의 기대와 일치합니다.

요청이 항상 404인 이유는 무엇입니까?
예를 들어 DefaultServlet은 요청을 처리할 때 현재 요청한 리소스가 Resource에 있는지 확인합니다.

여기에서는 캐시를 사용하여 현재 애플리케이션의 모든 리소스 콘텐츠를 기록합니다.

은 리소스에서 찾을 수 없습니다. 아래 그림은 Tomcat 루트 애플리케이션의 리소스입니다
요청이 항상 404인 이유는 무엇입니까?

여기서 응답에 상태와 메시지를 설정하면 전체 처리 프로세스가 종료되고 오류 페이지가 나타납니다. 특정 구성에 따라 표시되며, 다른 상태 코드는 다른 페이지에 해당할 수 있습니다. 다음은 이전 기사에서 특정 구현을 분석한 것입니다. (귀하의 오류 페이지입니다. 아니요, 귀하의 오류 페이지입니다.)

다른 상황을 분석해 보겠습니다.

예를 들어 관리자 애플리케이션을 요청하면 애플리케이션 이름이 Manager 또는 prepareR 로 기록됩니다. 이번에는 실제로 위 처리와 일치합니다. 이 애플리케이션 이름은 이 애플리케이션의 리소스로 인식되어 처리되므로 해당 리소스가 없으면 자연스럽게 404가 반환됩니다.

또 다른 상황을 살펴보겠습니다.

매니저 애플리케이션 아래에 404.jsp 에러페이지가 있는데, 다음 양식으로 직접 요청하면 여전히 404가 나옵니다

http://localhost:8080/manager/WEB-INF/jsp/404.jsp

모두가 이것이 내부 디렉토리에 대한 액세스라는 것을 알고 있습니다. Tomcat 제한이 적용되었습니다. (WEB-INF 디렉토리에 대해 얼마나 알고 계십니까?)
또 다른 것을 살펴보겠습니다:
index.jsp에 있다고 가정하면 애플리케이션의 특정 페이지는 sendRedirect를 사용하면 기본적으로 다른 페이지로 이동합니다. 다행히 점프 후 구체적인 경로 정보가 표시됩니다. 하지만 전달을 사용한다고 가정하면 이때 전달한 페이지는 존재하지 않습니다
이때 모든 요청은 404가 되지만 요청한 페이지는 분명히 디렉토리에 조용히 놓여 있는 것을 볼 수 있습니다.

그래서 404를 반환하는 요청을 보면 상황을 사례별로 분석하여 구체적인 원인을 파악해야 하고, 리소스를 실제로 찾을 수 없는지, 또는 다른 이유.

동일한 404 오류 페이지에 해당하는 여러 오류 코드를 구성했을 수도 있습니다. 404가 표시될 때마다 다른 이유가 있을 수 있습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.