Page tree

이제 브라우저가 보내는 요청에 대해 이해를 했으니 서버가 보내는 응답을 확인해 보겠습니다.

 

피들러 화면에서 하단의 맨 오른쪽 탭중 Raw 라고 적힌 버튼을 클릭하면 서버가 보낸 헤더를 그대로 볼 수가 있습니다.

 

HTTP 응답

 

이제 응답에서 중요한 부분에 대해서 알아 보겠습니다. 

HTTP 응답

 

상태 라인

HTTP 요청과 마찬가지로 응답에서도 첫 번째 줄이 가장 중요하며 이것을 HTTP 상태 라인(Status Line) 이라고 합니다. 응답의 상태 라인도 매우 간단하며 다음과 같은 구조로 이루어져 있습니다.

HTTP 상태 라인

버전은 응답과 마찬가지로 사용하는 프로토콜의 버전을 의미합니다.

가장 중요한 부분은 상태 코드로 클라이언트가 요청한 결과가 어떻게 처리되었는지 나타냅니다. 200 은 요청이 성공해서 정상적인 응답이 돌아왔음을 나타냅니다.

여기에서는 302 라는 응답이 왔는데 이것은 컨텐츠가 다른 곳에 있으니 그리로 가라는 의미입니다. 응답 구문은 상태 코드와 동일하지만 사람이 보고 알수 있도록 문자열로 되어 있습니다.

상태 코드의미설명
1xxInformational(정보)요청을 받았으며 처리가 계속되고 있음을 나타냅니다.
2xxSuccess(성공)요청이 성공했음을 나타냅니다. 보통 200을 성공으로 사용하지만 UI 가 없는 API 등에서는 처리가 완료되었을 경우 201 이나 204 응답을 보내는 경우도 있습니다.
3xxRedirection(리다이렉션)클라이언트가 요청한 컨텐츠가 다른 곳에 있다는 의미입니다.
4xxClient Error(클라이언트 에러)클라이언트 측에 기인한 오류로 요청이 실패했음을 나타냅니다.
5xxServer Error(서버 에러)서버 측에 기인한 오류한 오류로 인해 요청이 실패했음을 나타냅니다.
HTTP 응답 상태 코드 범주

HTTP 표준에는 많은 상태 코드가 있지만 일반적으로 많이 볼 수 있는 상태 코드는 다음 표와 같으며 이 정도만 알아도 HTTP 관련 문제에 부딪혔을 때 해결하는데 많은 도움이 될 것입니다.

상태 코드의미설명
200OK요청이 정상적으로 완료되었음.
201Created성공적으로 요청되었으며 서버가 새 리소스를 작성했음을 의미합니다. 브라우저가 API를 사용하여 POST 로 새로운 정보 등록을 요청할 경우 결과값으로 사용합니다.
204No Content성공적으로 요청되었으며 서버가 새 리소스를 작성했지만 응답 컨텐츠가 없음을 의미하며 API 에서 많이 사용하는 상태 코드입니다.
301Moved Permanently요청된 리소스가 영구적으로 다른 URI 에 있음을 나타냅니다.
302Found요청된 리소스가 일시적으로 다른 URI 에 있음을 나타냅니다.
401Unauthorized권한없는 컨텐츠를 요청했을때 인증을 거치라는 의미로 사용하며 요처한 인증이 실패했을 경우에도 응답으로 전송합니다.
403Forbidden금지된 컨텐츠를 요청하여 서버가 실행을 거부했음을 나타냅니다.
404Not Found요청한 리소스가 서버에 없음을 나타내며 브라우저에서 잘못된 URL 을 전송했을 경우 발생합니다.
500Internal Server ErrorJava 나 PHP 등 서버 내부에서 실행되는 프로그램에서 예외가 발생했음을 나타냅니다.
503Service Unavailable서버가 현재 작업이나 유지보수로 인해 잠시 가용하지 않음을 나타냅니다. 웹 서버와 WAS 로 기능이 나눠진 경우 웹 서버가 WAS 에 연결하지 못할 경우에도 발생합니다.
대표적인 상태 코드

 

메시지 헤더

상태 라인에 이어서 나오는 것은 메시지 헤더(그림중 2번)이며 두번째 줄부터 빈 줄까지 계속됩니다. 서버의 HTTP 응답 메시지 헤더의 종료는 두 개의 빈줄로 표시하며 주요 헤더는 다음과 같습니다.

 

Cache-Control

브라우저가 이 페이지를 캐쉬로 처리할 때 참고하라는 의미이며 no-cache 로 지정할 경우 캐시하지 말라는 의미입니다. no-cache 는 로그인 페이지나 관리자 페이지등 중요한 페이지일 경우 설정합니다.

 

Content-Type

서버가 보내는 컨텐츠의 형식을 표시하는 헤더로 정확히 설정되어야 브라우저가 컨텐츠 종류에 따라 적절하게 처리할 수 있습니다. 또 중요한 부분은 ; charset=UTF-8 이며 컨텐츠의 인코딩이 어떻게 되어 있는지를 지정합니다. 인코딩 항목이 제대로 되어 있지 않으면 브라우저 화면에서 한글이나 한자같은 비영어권 문자가  깨져 보일수 있습니다.


Location

서버의 응답이 컨텐츠가 다른 곳에 있다는 의미인 302 이므로 Location 헤더를 통해 가야할  URL 을 지정합니다. 301, 302 일 경우에만 볼 수 있는 헤더입니다.

 

Server

사용하는 웹 서버 소프트웨어의 종류와 버전을 표시합니다.

 

메시지 본문

마지막은 메시지 본문으로 이 경우 HTML 파일의 내용이 그대로 들어가 있으며 텍스트이므로 우리가 직접 읽을 수 있습니다. PNG 나 GIF 같은 이미지 파일이나 동영상 파일들은 바이너리 형식이므로 피들러에서는 제대로 표시되지 않고 알수 없는 문자열로 보이게 됩니다.