HTTP (Hyper Text Transper Protocol)
HTTP (Hyper Text Transper Protocol) 이란?
소개
- Hyper Text (HTML)을 전송하기 위한 서버/클라이언트 모델 따르는 전송 프로토콜
- OSI Model "응용 계층"에 해당함. TCP/IP 위에서 작동
- 포트번호 80번 사용
특징
- 단방향 Request & Response
Client 요청이 들어오면 Server가 응답하고 연결을 끊는 단방향적 통신 방식이다.
Client는 도메인 + 자원위치(URL) 또는 도메인 + 자원식별자(URI)를 통해 요청
Server는 요청에 따른 HTML 문서 / JSON / XML 등의 형태로 응답
PULL 프로토콜 (수신자가 TCP연결 초기화 한다.) - 비연결 (Connectless)
요청에 대한 응답 보내면 바로 연결 끊긴다.
→ 이전 정보 유지를 위해 쿠키/세션 사용하기도 함 - 무상태 (Stateless)
연결 끊는 순간 통신 끝나며, 상태정보 (주고 받았던 정보)를 저장하지 않는다.
필요에 따라 세션/쿠키 등을 통해 상태를 저장하는 것 처럼 보이게 할 수 있다.
HTTP 메시지
요청, 응답 시 정보를 패킷에 넣어서 보낸다.
메시지 타입
1. HTTP Request Message (클라이언트→서버)
2. HTTP Response Message (서버→클라이언트)
HTTP Request Message
- Start Line
한 줄로 이루어져 있다.
1) HTTP 메소드 : 요청 의도 (GET, POST, DELETE, UPDATE)
2) Request Target : URL, 경로 등 (포멧은 HTTP 메소드에 따라 다름)
3) HTTP 버전 : 버전에 따라 요청 메시지 구조, 데이터 상이할 수 있음.
- Request Header
부가적인 정보가 키-값 방식으로 들어간다.
- General Header : 요청 URL, 메소드, 상태 코드 (데이터와는 무관함)
- Request Header : 클라이언트 자체에 대한 추가 정보
- Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보
- Request Body
실제 전달 내용
GET, HEAD, DELETE, OPTIONS 같은 리소스 가져오는 요청은 보통 본문 필요없음
HTTP Response Message
- Status Line
한 줄로 이루어져 있다.
1) Protocol version : 보통 HTTP/1.1
2) Status Code : 요청의 성공 여부
3) Status Text : 상태 코드에 대한 설명
ex) HTTP/1.1 404 Not Found. - Response Header
부가적인 정보가 키-값 방식으로 들어간다.
- General Header : 날짜, 연결 상태 등
- Response Header : 서버 자체에 대한 정보(이름, 버전 등)
- Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보
- Body
실제 전달 내용
201, 204 같은 상태 코드를 가지는 응답에는 보통 본문 없음
HTTP 메소드
HTTP 메소드 | 설명 | 전송방식 (HTTP1.1) |
GET | [데이터 조회] URL에 데이터를 포함시켜 명령 내리며, 데이터가 Header에 포함되어 전달됨 데이터가 URL에 노출되므로 중요 정보는 GET 방식 사용하면 안됨. 길이 제한 있으며 캐시될 수 있음. |
GET [요청 URL]?query_string HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n Content-Lenght: [길이(byte)]\r\n [Data] |
POST | [데이터 제출] 데이터가 Header 가 아닌 본문에 포함되어 전달됨 GET과 유사하나, 정보 제출하는 용도로 사용됨 데이터가 URL에 노출되지 않아 보안에 유리함. 길이 제한 없고 캐시되지 않음. |
POST [요청 URL]?query_string HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n Content-Lenght: [길이(byte)]\r\n [query-string] or [Data] |
PUT | [데이터 수정] 갱신 위주의 명령이다. POST와 유사한 전송 구조를 가짐. Header 이외에 메시지(데이터)가 함께 전송된다. |
PUT[요청 URL]?query_string HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n Content-Lenght: [길이(byte)]\r\n [query-string] or [Data] |
DELETE | [데이터 삭제] 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드 |
DELETE [요청 URL] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n |
HEAD | [메세지 헤더 취득] GET과 유사하지만, Header 정보만 가져옴 |
HEAD [요청 URL] HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n |
TRACE | [경로 조사] 요청 리소스가 수신되는 경로 보여줌. |
TRACE [요청 URL] HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n |
CONNECT | [프록시에서 터널링 요구] 웹 서버에서 중간 서버(프록시)를 경우할 때 사용 |
CONNECT [요청 URL] HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n |
OPTIONS | [응답 가능 메소드 요청] 시스템에서 지원되는 메소드 종료 확인 가능 |
OPTIONS [요청 URL] HTTP/1.1\r\n Host:[Hostname] or [IP Address]\r\n |
PATCH | [리소스의 부분 교체] 로컬 자원 특성을 요청 내용으로 교체 |
ex) 아이디가 1234인 유저
- query-string : /users?id=1234
- Path Variable : /user/123
상태코드 (Status Code)
1xx : 정보 | 100 : Continue. 지금까지의 상태 괜찮음. 101 : Switching Protocol. 프로토콜 변경을 알림. 클라이언트가 보낸 Upgrade (en-US) 요청 헤더에 들어감. 102 : Processing (WebDAV (en-US)). 서버가 요청 수신했지만 아직 응답 알려줄 수 없음 |
2xx : 성공 | 200 : OK. 요청 성공 201 : Created. 생성 요청 성공 202 : Accepted. 요청 수락(처리 보장X) 204 : No Content. 성공했으나 돌려줄게 없음 |
3xx : 리다이렉션 | 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록 301,302,303 : Redirect. 리소스 위치가 변경된 상태 304 : Not Modified. 리소스가 수정되지 않았음 |
4xx : 클라이언트 오류 | 400 : Bad Request. 요청 오류 401 : Unauthorized. 권한없음 403 : Forbidden. 요청 거부 404 : Not Found. 리소스가 없는 상태 405 : Method Not Allowd. 요청 메소드 사용 불가 408 : Request Timeout. 요청 시간이 오래되거나 서버에서 연결 끊을때 보내짐. 409 : Conflict. 서버의 상태와 충돌됨 410 : Gone (en-US). 요청한 콘텐츠가 영구적으로 삭제된 경우 411 : Length Required. Content-Length 헤더 필드가 정의되지 않아 거절됨 429 : Too Many Requests 432 : Locked (WebDAV (en-US)) 리소스 접근이 잠김 |
5xx : 서버 오류 | 500 : Internal Server Error. 서버가 요청을 처리 못함 501 : Not Implemented. 서버가 지원하지 않는 요청 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태 504 : Gateway Timeout : 서버가 게이트웨이 역할하고 있으며 적시 응답 받을 수 없음 505 : HTTP version not Supported : 요청에 사용된 HTTP 버전은 서버에서 지원 불가 506 : Veriant Also Negotiaties (en-US). 서버 내부 구성 오류 존재 507 : Insufficinent Storage (en-US). 서버 내구 구성 오류 존재. 508 : Loop Detected (en-US). 무한루프 감지 510 : Not extended (en-US). 서버가 요청이행하려면 요청에 대한 추가 확장 필요함 511 : Netowkr Authentication Required (en-US) 네트워크 접글을 위한 인증이 필요함 |
HTTP 버전
- HTTP/1.0
요청을 날릴 때마다 연결을 새로 생성, 성능 좋지 않고 비효율적 - HTTP/1.1
지속 커넥션 (Persistent Connection)과 HTTP 파이프라이닝 개념 추가.
연속적인 요청 사이에 커넥션을 유지하여 새 커넥션 여는데 필요한 시간 단축
응답 기다리지 않고 연속적인 요청을 보내서 네트워크 지연 줄인다.
요청을 미리 여러 서버에 날릴 수 있게 되었다. - HTTP/2
커넥션 관리의 몇가지 모델을 더 추가
end-to-end가 아닌 hop-by-hop인 두 개의 연속된 노드 사이의 커넥션에 적용
클라이언트와 첫 번째 프록시 사이 커넥션 모델은 프록시와 서버 또는 다른 프록시 사이의 커넥션 모델과 다를 수 있다.
HTTP 버전에 대한 심도있는 내용은 따로 포스팅으로 다뤄보겠다.
엄청나게 많이 달라짐...
참고) 통신 프로토콜
참고) 응용 계층 (Application Layer)
여러 하위 통신 프로토콜 객체에 대하여 사용 관점의 사용자 인터페이스 제공
하부 계층들을 이용해 사용자에게 편리한 응용 환경을 제공하는 것에 초점을 둠
받은 데이터를 어떻게 활용할지 담당한다.
대상이 되는 프로세서를 식별하기 위해 IP 주소와 포트 번호를 사용한다.
PDU (Protocol Data Unit)는 메시지 또는 데이터라고 한다.
응용 계층의 구현은 사용자 프로그램 환경에서 이루어진다.
응용 계층의 프로그래밍을 위해서는 소켓 프로그래밍을 알아보면 된다.
l 소켓
어플리케이션 계층과 트랜스포트계층의 인터페이스
l IP주소
메시지가 전달되어야할 호스트의 주소를 의미
l 포트 번호 (Port Number)
호스트에서 실행중인 프로세스가 무엇인지 알려주는 것을 포트 번호가 한다.
IP주소를 통해서 메시지를 전달해야하는 호스트 주소를 알았더라면
수신 호스트에서 수행되고 있는 프로세스도 식별해야 하는데
포트번호 그 목적으로 사용된다.0~65535까지의 16bit 정수로 표현됨.
참고) URL, URI
참고) MIME 이란?
참고) Socket 통신
연결지향형 실시간 양방향 통신
Server와 Client가 특정 Port를 통해 연결을 성립한다.
실시간 채팅, Streaming 서비스 등에 사용됨
'프론트엔드 개발 > Web 지식' 카테고리의 다른 글
웹 지식 - URL 과 URI (0) | 2021.06.05 |
---|---|
웹 지식 - 통신 프로토콜 (0) | 2021.06.05 |