Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Be Coder

Servlet Programming - HTTP 프로토콜의 이해(Request/Response Msg) 본문

Servlet Programming - HTTP 프로토콜의 이해(Request/Response Msg)

ForzaCoding 2020. 4. 19. 16:35

1. HTTP 프로토콜을 알아야 하는 이유

서블릿의 동작 과정을 이해하기 위해서는 HTTP 프로토콜에 대해 알아야 한다. 

 

> HTTP : 인터넷 상에서 Hyper Text를 지원하는 html과 이미지, 파일, 영상 등을 주고받기 위한 서버/클라이언트 모델을 따르는 전송 프로토콜. TCP/IP 위에서 작동하며, 하나의 연결에 하나의 요청을 하는 것을 기준으로 설계되어 있다. 즉, 20개의 요청이 있다면 연결-> 다운 -> 연결 끊음을 반복하므로, TCP 통신과정에서 자원 낭비가 일어나게 된다.

 

> Stateless : 비연결상태. http의 특징으로, 클라이언트 요청에 의해 서버와 연결이 되고, 요청에 대한 응답이 끝나면 프로토콜에서 연결을 끊는다.

  - 장점 : 접속 유지를 최소화하여, 다수를 상대로 하는 서비스에서 빠른 응답 처리 가능.

  - 단점 : 응답 후, 연결을 끊기 때문에, 클라이언트의 이전 상태를 알 수 없음. 즉, 로그인 정보 및 사용자 상태 유지가 불가.

> Keep Alive : HTTP 1.1부터 지원되는 기능. 지정된 시간 동안은 연결을 끊지 않고, 계속 요청을 보낼 수 있게 해줌.

 

> 서블릿은 HTTP 프로토콜을 사용하는 웹 환경이나 서버 환경에서 쓰이는 기술이므로, 앞으로의 실습이나 요청/응답의 과정을 이해하기 위해서는 HTTP에 대한 이해가 필요하다.

 

2. Request Message

Request Msg Format
Detail Request Msg

- 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

Response Message Format

- 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