Be Coder
Servlet Programming - HTTP 프로토콜의 이해(Request/Response Msg) 본문
1. HTTP 프로토콜을 알아야 하는 이유
서블릿의 동작 과정을 이해하기 위해서는 HTTP 프로토콜에 대해 알아야 한다.
> HTTP : 인터넷 상에서 Hyper Text를 지원하는 html과 이미지, 파일, 영상 등을 주고받기 위한 서버/클라이언트 모델을 따르는 전송 프로토콜. TCP/IP 위에서 작동하며, 하나의 연결에 하나의 요청을 하는 것을 기준으로 설계되어 있다. 즉, 20개의 요청이 있다면 연결-> 다운 -> 연결 끊음을 반복하므로, TCP 통신과정에서 자원 낭비가 일어나게 된다.
> Stateless : 비연결상태. http의 특징으로, 클라이언트 요청에 의해 서버와 연결이 되고, 요청에 대한 응답이 끝나면 프로토콜에서 연결을 끊는다.
- 장점 : 접속 유지를 최소화하여, 다수를 상대로 하는 서비스에서 빠른 응답 처리 가능.
- 단점 : 응답 후, 연결을 끊기 때문에, 클라이언트의 이전 상태를 알 수 없음. 즉, 로그인 정보 및 사용자 상태 유지가 불가.
> Keep Alive : HTTP 1.1부터 지원되는 기능. 지정된 시간 동안은 연결을 끊지 않고, 계속 요청을 보낼 수 있게 해줌.
> 서블릿은 HTTP 프로토콜을 사용하는 웹 환경이나 서버 환경에서 쓰이는 기술이므로, 앞으로의 실습이나 요청/응답의 과정을 이해하기 위해서는 HTTP에 대한 이해가 필요하다.
2. Request Message
- Request Line / Request Header / Request Body 3개로 구성됨.
> Request Line
- 요청 메소드 : GET, POST, PUT, DELETE
> 어떤 방식으로 웹 브라우저와 웹 서버가 통신할 것 인지.
- 요청 URL
> 사용자가 웹 서버에 요청하는 정보가 무엇인지.
- HTTP의 버전
> 현재 웹 브라우저가 사용하는/사용할 수 있는 버전이 몇 인지.
> Request Header
- Host : 연결된 사용자(컴퓨터)를 식별하는 이름
- localhost(가상 호스트) : 사용자가 요청하는 웹 서버의 주소(웹 서버 하나가 여러 도메인을 서비스할 수 있음.)
- port : 컴퓨터에 여러 서버가 설치되어 있을 수 있으며, 어떤 포트번호에 등록된 웹 서버인지를 나타냄.
- Accept : 클라이언트가 받을 수 있는 컨텐츠
- Encoding : 웹 브라우저와 웹 서버가 통신할 때, 응답하는 데이터가 크다면, 압축 전송(네트워크 자원 최소화)하는데, 웹 브라우저에서 압축을 풀어서 처리함. 이 때, 웹 브라우저가 지원하는 압축 방식.(gzip)
- Cookie
- Content-Type : Msg Body 종류
- Content-Length : Msg Body의 길이
- If-Modified-Since : 사용자가 가지고 있는 파일을 마지막으로 언제 다운 받았는지 웹 서버에 알려줌.
- 요청받은 웹 서버는 응답 시, 자신이 가진 파일과 비교함. 웹 서버의 파일이 최신이면 그대로 전송하고, 아니면 전송 안함.
> Request Body : 엔티티
3. Response Message
- Status Line / Response Header / Response Msg Body 로 구성.
> Status Line(요청 라인) : 버전 / 상태 코드 / 상태 메시지(HTTP/1.1 200 OK)
- HTTP-Version : 지금 세션에 사용된 HTTP version.
- Status-code : 요청의 결과를 반영하기 위해 서버에서 생성된 3-digit 숫자
- reason-pharse : 상태 코드에 대한 짧은 설명
> Response Header
- Content-Type : Body data의 타입
- Content-Length : Body data 길이
- Set-Cookie : 쿠키 설정
- ETag : 엔티티 태그
> Response Body : HTML, JSON 등..
4. Response Status Code 종류
> Status code는 3-digit 숫자.
3-digit | 내용 |
1xx (정보) | 요청을 받고, 서버는 처리 중. |
2xx (성공) | 요청을 성공적으로 받고, 이해하고, 처리하고, 서비스함. |
3xx (리다이렉션) | 요청을 처리하기 위해서, 어떠한 액션이 취해져야 함. |
4xx (클라이언트 에러) | 요청이 이상하거나, 서버가 이해할 수 없음. |
5xx (서버 에러) | 유효한 요청에 대해 서버가 처리 실패. |
> 상세한 코드 정보
Code | 내용 |
100 Continue | 서버가 요청을 받고, 응답하기 위해 처리 중. |
200 OK | 요청이 수행 완료.(요청 성공) |
201 Created | 생성 요청 성공 |
202 Accepted | 요청 수락(처리는 보장 못함) |
204 | 성공했으나 응답할 것이 없음. |
300 Multiple Choices | 여러 리소스에 대한 요청 결과 목록 |
301 Move Permanently | 요청한 리소스가 새 위치로 영구적 이동됐음. 새 위치의 URL은 응답 헤더 Location에 주어짐. 클라이언트는 새로운 위치로 다시 요청해야함. 애플리케이션은 새 위치에 대한 모든 참조를 업데이트해야함. |
302 Found & Dedirect |
301과 동일하지만, 새 위치는 일시적. 클라이언트는 새로운 요청을 해야 하지만, 애플리케이션은 참조를 업데이트할 필요가 없음. * 301, 302, 303은 리소스의 위치가 변경된 상태 코드 |
304 Not Modified | If-Modified-Since의 조건부 GET 요청에 대응하여, 서버는 요청된 리소스가 수정되지 않았음을 알림. |
400 Bad Request | 잘못된 요청. 서버가 요청을 해석하거나 이해 불가. 요청 메시지의 구문 오류일 수 있음. |
401 Authentication Required | 인증 필요(권한 없음). 요청된 리소스가 보호되고, 클라이언트의 자격 증명(username/password)이 필요함. 클라이언트는 자신의 username/password과 함께 재요청해야함. |
403 Forbidden | 요청 거부. 요청한 리소스를 서버에서 찾을 수 없음. |
404 Not Found | 찾을 수 없음. 요청한 리소스가 서버에 없음. |
405 Method Not Allowed | 메소드 허용 안됌. 사용된 요청 방법(POST, PUT, DELETE)는 유효함. 하지만, 서버는 요청한 리소스에 대해 이 방법을 허용하지 않음. |
408 Request Timeout | 요청 시간 초과 |
414 Request URI too Large | 요청 URI가 너무 큼. |
500 Internal Server Error | 내부 서버 오류(요청 처리 못함). 요청에 응답하는 Server-side-program의 오류로 서버가 혼동되는 경우가 대부분. |
501 Method Not Implemented | 서버가 지원하지 않는 요청. 사용된 요청 방법이 잘못된 경우가 많음(GET을 Get으로 잘못 입력했던가) |
502 Bad Gateway | 잘못된 게이트웨이. 프록시 또는 게이트웨이가 업스트림 서버로부터 잘못된 응답을 받음. |
503 Service Unavailable | 서비스 사용 불가. 오버로드 혹은 유지보수 중이라 서버가 응답할 수 없음. 클라이언트는 나중에 다시 시도해야 함. |
504 Gateway Timeout | 게이트웨이 시간 초과. 프록시 또는 게이트웨이는 업스트림 서버로부터 시간 초과를 수신함. |
** Request / Response Message 참고 : https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/http_basics.html
'웹' 카테고리의 다른 글
Servlet Programming - Servlet API (0) | 2020.04.19 |
---|---|
Servlet Programming - 서블릿 개요와 동작 과정 (0) | 2020.04.19 |
웹 애플리케이션 - Client/Server (0) | 2020.04.19 |
웹 프로그래밍 방식 (0) | 2020.04.17 |
웹 애플리케이션 (0) | 2020.04.17 |