티스토리 뷰
통신 프로토콜
웹 서버에 있는 리소스를 클라이언트가 받아 보려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 합니다. 그러면 서버가 해당 요청을 이해하고, 대응되는 동작을 통해 클라이언트에게 리소스를 반환합니다. 여기서 클라이언트의 행위를 요청(Request), 서버의 행위를 응답(Response)이라고 합니다.
현재까지 제정된 표준 통신 프로토콜에는 네트워크 통신의 기초가 되는 TCP/IP, 웹 애플리케이션이 사용하는 HTTP, 파일을 주고받을 때 사용하는 FTP 등 매우 많은 종류가 있습니다.
HTTP(Hyper Text Transfer Protocol)란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜입니다. 팀 버너스 리(Team Berners-Lee)와 그의 팀이 제정한 이후, 현대 웹 서비스의 바탕이 되는 프로토콜로 자리 잡았습니다.
HTTP의 기본 메커니즘은 클라이언트가 서버에게 요청하면, 서버가 응답하는 것입니다. 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킵니다. 이 포트는 일반적으로 TCP/80 또는 TCP/8080입니다. 클라이언트가 서비스 포트에 HTTP 요청을 전송하면, 이를 해석하여 적절한 응답을 반환합니다.
HTTP 통신을 요청할 때 HTTP 메시지 만들어서 보낸다. (Request)
HTTP 통신을 응답할 때 HTTP 메시지 만들어서 보낸다. (Response)
HTTP 요청
HTTP 요청은 서버에게 특정 동작을 요구하는 메시지입니다. 서버는 해당 동작이 실현 가능한지, 클라이언트가 그러한 동작을 요청할 권한이 있는지 등을 검토하고, 적절할 때만 이를 처리합니다.
시작 줄
HTTP 요청의 시작 줄은 메소드(Method), 요청 URI(Request-URI), 그리고 HTTP 버전으로 구성됩니다. 각각은 띄어쓰기로 구분합니다.
메소드(Method)
URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작을 나타냅니다. HTTP 표준에 정의된 메소드는 8개가 있으나, 여기서는 자주 사용되는 GET과 POST 메소드만 설명하겠습니다.
GET은 리소스를 가져오라는 메소드입니다.
이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링하기 위해 리소스가 필요합니다. 이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아옵니다.
POST는 리소스로 데이터를 보낸다는 메소드입니다.
전송할 데이터는 보통 HTTP 바디에 포함됩니다. 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내집니다.이 외에 요청 URI는 메소드의 대상을, HTTP 버전은 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타냅니다.
HTTP 응답
HTTP 요청에 대한 결과를 반환하는 메시지입니다. 요청을 수행했는지, 하지 않았는지, 안 했다면 이유는 무엇인지와 같은 상태 정보(Status), 그리고 클라이언트에게 전송할 리소스가 응답에 포함됩니다.
시작 줄
HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드(Status Code), 그리고 처리 사유(Reason Phrase)로 구성됩니다. 각각은 띄어쓰기로 구분됩니다
HTTP 버전은 서버에서 사용하는 HTTP 프로토콜의 버전을 나타냅니다. 그리고 상태 코드는 요청에 대한 처리 결과를 세 자릿수로 나타냅니다. HTTP 표준인 RFC 2616은 대략 40여개의 상태 코드를 정의하고 있는데, 각각은 첫 번째 자릿수에 따라 5개의 클래스로 분류됩니다. 처리 사유는 상태 코드가 발생한 이유를 짧게 기술한 것입니다.
상태 코드
1xx
요청을 제대로 받았고, 처리가 진행 중임
2xx
요청이 제대로 처리됨
200: 성공
3xx
요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함.
302: 다른 URL로 갈 것
4xx
클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다.
400: 요청이 문법에 맞지 않음
403: 클라이언트가 리소스에 요청할 권한이 없음
404: 리소스가 없음
5xx
클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했습니다.
500: 요청을 처리하다가 에러가 발생함
503: 서버가 과부하로 인해 요청을 처리할 수 없음
HTTP 메시지
HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버가 반환하는 HTTP 응답이 있습니다. 기능과 세부 구조에서는 차이가 있지만, 크게 보면 이들은 HTTP 헤드와 바디로 구성된다는 공통점이 있습니다.
- HTTP 헤드
HTTP 헤드의 각 줄은 CRLF로 구분되며, 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 부릅니다. 헤드의 끝은 CRLF 한 줄로 나타냅니다.
- HTTP 바디
헤드의 끝을 나타내는 CRLF 뒤, 모든 줄을 말합니다. 클라이언트나 서버에게 전송하려는 데이터가 바디에 담깁니다.
'JSP' 카테고리의 다른 글
WAS와 웹 컨테이너의 역할 (0) | 2024.07.01 |
---|---|
웹 브라우저, URL, 웹 렌더링 (0) | 2024.06.28 |
Web, Web resource, 웹 클라이언트와 서버의 통신 (0) | 2024.06.28 |
HTTPS (0) | 2024.06.28 |
웹 서버 VS 웹 애플리케이션 서버(WAS) (0) | 2024.06.27 |