# 요청(Request)과 응답(Response)
- 클라이언트는 웹 서버에게 특정 리소스를 지정해서 제공해달라고 '요청'
- 서버가 해당 요청에 대응되는 동작을 통해 클라이언트에서 리소스를 반환하며 '응답'
→ 프로토콜 : 이러한 규격화된 상호작용에 적용되는 '평등한' 약속(규약)
(비교 : 인터페이스는 '강제성이 있는' 약속)
ex) TCP/IP : 네트워크 통신의 기초가 되는 프로토콜
HTTP : 웹 애플리케이션이 사용하는 프로토콜
FTP : 파일을 주고받을 때 사용하는 프로토콜
HTTP (Hyper Text Transfer Protocol)
- 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜
# 기본 메커니즘
- 클라이언트가 서버에게 요청하면 서버가 응답하는 것
: 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킴 (TCP/80 or TCP/8080을 주로 사용함)
→ 클라이언트가 서비스 포트에 HTTP 요청을 전송하면 이를 해석하여 응답을 반환함
# Connection Less 지향
- 요청이 종료되면 부하를 줄이기 위해 연결을 끊음
→ 해당 사용자임을 인증하는 정보가 필요함 : 쿠키 (Cookies)
HTTP 메시지
# 종류
1) Request HTTP 메세지
2) Response HTTP 메세지
# 기본 구조
1) HTTP 헤드
- 메시지에 대한 정보
- 각 줄은 CRLF(빈 줄)로 구분됨
▶ 첫 줄 : 시작 줄 (Start-line)
▶ 나머지 줄 : 헤더 (Header)
· 필드와 값으로 구성됨 → HTTP 메시지 또는 바디의 속성을 나타냄
· 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있음
- 헤드의 끝은 CRLF 한 줄로 나타냄
- 헤드에 담아서 보내는 정보는 노출됨
2) HTTP 바디
- 헤드의 끝을 나타내는 CRLF 뒤에 있는 모든 줄
- 클라이언트가 서버에게 or 서버가 클라이언트에게 전송하려는 데이터가 담김
- 바디에 담아서 보내는 정보는 노출되지 않음
→ 따라서, POST 시에 보내는 정보는 바디 부분에 작성함
HTTP 요청 (Request)
- 서버에게 특정 동작을 요구하는 메시지
→ 서버는 해당 동작과 클라이언트의 권한을 검토하고, 적절할 때만 이를 처리함
# 시작 줄 (각 요소를 띄어쓰기로 구분함)
1) 메서드(Method)
: URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작을 나타냄
▶ GET
: 리소스를 가져오라는 메서드
· 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면
새로운 페이지를 렌더링하기 위해 리소스 필요
→ 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아옴
▶ POST
: 리소스로 데이터를 보내라는 메서드
· 전송한 데이터는 HTTP 바디에 포함됨
ex) 로그인 시 id, pw 등이 POST 요청을 통해 서버로 보내짐
2) 요청 URI
: 메서드의 대상이 되는 리소스 ex) html 파일명
3) HTTP 버전
: 클라이언트가 사용하는 HTTP 프로토콜의 버전 ex) HTML/1.1
HTTP 응답 (Response)
- HTTP 요청에 대한 결과 및 이유, 전송할 웹 리소스를 반환하는 메시지
# 시작 줄 (각 요소를 띄어쓰기로 구분함)
1) HTTP 버전
- 서버에서 사용하는 HTTP 프로토콜의 버전
2) 상태 코드 (Status Code)
- 요청에 대한 처리 결과를 세 자릿수로 나타낸 것
상태 코드 | 설명 |
1xx | 요청을 제대로 받았고, 처리가 진행 중임 |
2xx | 요청이 제대로 처리됨 - 200 : 성공 |
3xx | 요청을 처리하려면 클라이언트가 추가 동작을 취해야 함 - 302 : 다른 URL로 갈 것 |
4xx | 클라이언트가 잘못된 요청을 보내어 처리에 실패함 - 400 : 요청이 문법에 맞지 않음 - 403 : 클라이언트가 리소스를 요청할 권한이 없음 - 404 : 리소스가 없음 |
5xx | 클라이언트의 요청은 유효하지만, 서버에 에러가 발생함 - 500 : 요청을 처리하다가 에러가 발생함 - 503 : 서버 과부하로 인해 요청을 처리할 수 없음 |
3) 처리 사유 (Reason Phrase)
- 상태 코드가 발생한 이유를 짧게 기술함
- HTTP의 응답과 요청은 평문으로 전달됨 (특정 형식이 없는 문자열)
→ '중간 탈취자'가 이러한 정보를 가로채면 중요한 정보가 유출될 수 있음
→ 보완 : HTTPS
HTTPS (HTTP over Secure socket layer)
- TLS (Transport Layer Security) 프로토콜 도입
→ TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화함
→ 공격자가 중간에 메시지를 탈취하더라도 해석할 수 없음
→ HTTP 통신이 도청과 변조로부터 보호됨
→ 현재 개발되는 서비스들은 규모에 상관없이 HTTP보다 HTTPS를 사용하는 추세
'CS' 카테고리의 다른 글
[HTTP] REST API 방식 (0) | 2023.03.22 |
---|---|
[HTTP] 웹 서비스와 웹 리소스 (URI & URL) (0) | 2023.03.22 |
[HTTP] 인코딩과 포트 (0) | 2023.03.21 |
[CS] DTO/VO, DAO (0) | 2023.03.09 |
[CS] 명칭 표기법 (카멜, 파스칼, 스네이크, 헝가리안) (0) | 2023.03.09 |