HTTP 프로토콜
🦋 참고한 문서
- 프런트엔드 개발자가 알아야하는 HTTP 프로토콜 https://joshua1988.github.io/web-development/http-part1/
- 개알못을 위한 TCP/IP의 개념 https://brunch.co.kr/@wangho/6
- 숙명여자대학교 IT공학전공 임순범 교수님의 웹프로그래밍기초 강의 자료
- 도서 'HTTP 완벽 가이드'
HTTP 프로토콜
월드 와이드 웹(World Wide Web, WWW)에서 통신하는 데 사용하는 프로토콜 프로그램이다.
HTTP를 사용하는 방법은 여러가지지만, 웹브라우저와 웹 서버 사이에서의 쌍방향 통신에 사용하는 것이 가장 대표적이다.
HTTP 프로토콜의 특징
- HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용한다. 데이터가 지구 반대편에서 오든 지옥에서 오든 전송 중 손상되거나 꼬이지 않음을 보장한다. :open_mouth: wow
- HTTP 프로토콜은 상태가 없는 프로토콜이다. 데이터를 주고 받기 위한 각각의 데이터 요창이 서로 독립적이라는 뜻이다. 덕분에 서버는 세션과 같은 추가 정보를 관리하지 않아도 된다.
- HTTP 프로토콜은 TCP/IP 통신 위에서 동작하며, 기본 포트는 80번이다.
추가) TCP/IP 프로토콜
- TCP : 데이터를 여러 개의 작은 조각으로 나누어
패킷
이란 정보 단위를 생성하고, 패킷이 제대로 전송되는지 확인한다. 패킷의 순서가 뒤바뀌거나 일부가 누락되는 것을 신경쓰지 않고 보내는 데에만 집중한다. - IP : 데이터를 이동시킬 목적지를 정한다. 도착한 패킷을 점검하여 누락되었거나 변형된 패킷을 다시 요청한다.
웹 클라이언트와 서버
월드 와이드 웹의 기본 요소 : HTTP 클라이언트(웹 클라이언트)
, HTTP 서버(웹 서버)
클라이언트는 요청을 보내는 쪽을 의미하며, 서버는 요청을 받는 쪽을 의미한다. 대표적인 클라이언트는 바로 웹 브라우저다. 웹 브라우저는 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여준다.
예를 들어, 서버가 http://suyeon.dev/index.html
페이지를 열어볼 때, 웹 브라우저는 HTTP 요청을 http://suyeon.dev
서버로 보낸다. 서버는 요청받은 /index.html
객체를 찾고, 성공했다면 그것의 타입, 길이 등의 정보와 함께 HTTP 응답에 실어서 클라이언트에게 보낸다.
MIME
나에게는 익숙한 MIME...
인터넷은 수천 가지의 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 모든 객체 각각에 MIME이라는 데이터 포맷 라벨을 붙인다. 웹 브라우저(클라이언트)는 서버로부터 객체를 받을 때 다룰 수 있는 객체인지 MIME 타입을 통해 확인한다.
MIME 타입은 사선('/')으로 구분된 주 타입
과 부 타입
으로 이루어진 문자열 라벨이다. 아래는 MIME의 예시이다.
- HTML => text/html
- JPEG => image/jpeg
- GIF => image/gif
- plain ASCII => text/plain
- Quicktime Video => video/quicktime
- MS Office Powerpoint => application/vnd.ms-powerpoint
URL
웹 문서를 통해 각종 서비스를 제공하는 서버에서 각종 파일 등의 자원의 위치를 표시하는 표준이다. URL을 통해 서버에 자원을 요청할 수 있다.
일반적으로 서비스 프로토콜(scheme)://도메인 주소/폴더 경로/파일 이름
으로 구성된다.
HTTP 요청 메소드
URL을 이용하면 서버에 특정 데이터를 요청할 수 있는데, 이때 요청하는 데이터에 특정 동작을 수행하고 싶을 때 HTTP 요청 메소드(HTTP Request Methods)를 이용한다.
HTTP 요청 메소드 중 가장 많이 쓰이는 주요 메소드는 GET
, POST
, PUT
, DELETE
이다.
- GET: 서버에서 클라이언트로 지정한 리소스를 보내줘라(요청)
- PUT: 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라(변경)
- DELETE: 지정한 리소스를 서버에서 삭제하라(삭제)
- POST: 클라이언트 데이터를 서버로 보내라(생성)
HTTP 상태 코드
서버에서 보내주는 응답 정보이다. 200번대는 대부분 성공, 300번대는 리다이렉션, 400번대는 클라이언트 에러, 500번대는 서버 에러를 의미한다. 아래의 표는 상태 코드에 대한 몇 가지 예시이다.
상태 코드 | 설명 |
---|---|
200 | 문서가 바르게 반환됨 |
302 | 다른 곳에 가서 리소스를 가져가라 |
400 | Bad Request. 잘못된 요청 |
404 | Not Found. 리소스를 찾을 수 없음 |
503 | 서버 과부하 or 유지보수중 |
메시지
HTTP 요청과 응답은 메시지를 통해 전달된다. HTTP 메시지는 단순한 줄 단위의 문자열이며, 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다. 웹 클라이언트에서 웹 서버로 보낸 HTTP 메시지를 요청 메시지라고 부르며, 웹 서버에서 웹 클라이언트로 보내는 HTTP 메시지를 응답 메시지라고 부른다.
HTTP 메시지는 다음과 같은 세 구조로 나뉜다.
- 시작줄(Start line) : 요청인 경우 무엇을 해야 하는지, 응답이라면 무슨 일이 일어났는지에 대한 정보가 담겨 있다.
- 헤더(Headers) : 각 헤더 필드는 쉬운 구문 분석을 위해 콜론(:)으로 구분되어 있는 key와 value의 쌍으로 이루어져 있다. 헤더는 빈 줄로 끝난다.
- 본문(Body) : 필요에 따라 본문을 작성할 수도 있고, 생략해도 된다. 텍스트 외에도 임의의 이진 데이터(이미지, 비디오, 오디오, 애플리케이션 등)를 포함할 수 있다.
'Development' 카테고리의 다른 글
REST API 톺아보기 (2) | 2022.02.22 |
---|---|
[2020 여름 효창공원 스터디]DBMS (0) | 2020.09.06 |