API와 같이 다른 서버와 통신을 할 때에는 특정한 규칙에 맞춰 통신이 이루어져야 한다.
HTTP(Hyper Text Transfer Protocol)
: 서로 다른 서버 간에 문자 형식으로 데이터 형식을 주고 받을 때 지켜야하는 규약
HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이다. 클라이언트-서버 프로토콜이기도 하다. (수신자 측에 의해 요청이 초기화되는 프로토콜)
프로토콜이란?
컴퓨터 내부 또는 컴퓨터 사이에서 데이터 교환 방식을 정의하는 규칙체계
교환되는 데이터 형식에 대해 상호 합의하고 형식을 정의하는 규칙의 집합을 의미함.
HTTP 프로토콜의 특징
HTTP 프로토콜은 상태가 없는 Stateless 프로토콜이다. (데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리) 이러한 특징으로 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생긴다.
일반적으로 HTTP 프로토콜은 TCP/IP 통신 위에서 동작하며 기본 포트는 80번이다.
HTTP 메시지
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식이며, 두가지 타입이 존재한다.
요청(requests) : 클라이언트가 서버로 전달하여 서버의 액션을 일어나게 끔 하는 메시지.
응답(responses) : 요청에 대한 서버의 답변
또한 요청과 응답의 구조는 서로 닮았다. 구조는 아래 사진을 참고하자
1) 시작줄(start-line)에는 HTTP의 버전과 실행되어야 할 요청 또는 요청 수행에 대한 성공, 실패가 기록되어 있다. 시작줄은 항상 한 줄로 끝난다.
2) HTTP 헤더 세트가 들어간다. 헤더 세트에는 요청에 대한 설명 혹은 본문에 대한 설명이 들어간다.
3) 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입된다.
4) 요청과 관련된 내용이 옵션으로 들어가거나, 응답과 관련된 문서가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.
HTTP 요청(Request) 메시지
- 시작줄에는 HTTP Method, 요청 URI, HTTP 버전을 담는다.
- 어떠한 메서드를 통한 요청인지에 따라 Request body 여부가 결정된다. GET
, HEAD
, DELETE
, OPTIONS
처럼 리소스를 가져오는 요청은 보통 본문이 필요없다.
HTTP 요청 메서드 (HTTP Request Method)
GET
: 존재하는 자원에 대한 요청POST
: 새로운 자원을 생성PUT
: 존재하는 자원에 대한 변경DELETE
: 존재하는 자원에 대한 삭제PATCH
: 존재하는 자원에 대해 일부 수정OPTION
: 서버에서 허용하는 Method의 목록HEAD
: 서버 헤더 정보를 획득. Response Body 반환하지 않음
!! 참고 !! 때에 따라서 POST 메서드로 PUT, DELETE 동작 수행이 가능하다
HTTP 응답(Response) 메시지
- 시작줄(상태줄-Status line)에는 HTTP 버전과 상태 코드(Status code), 응답 메시지를 담는다.
- 200
, 404
, 302
- Renponse body에는 응답 리소스 데이터가 담겨져 있다
HTTP 상태 코드 (HTTP Status code)
HTTP 통신을 통해 전달하는 상태 코드는 요청에 대한 응답의 결과를 세자리 번호로 나타내준다. 주요한 상태코드는 아래와 같다. 더욱 자세한 상태 코드는 MDN에서 볼 수 있다.
[ 2xx - 성공 ]
200번대의 상태 코드는 대부분 성공을 의미
- 200 : GET 요청에 대한 성공
- 204 : No Content. 성공했으나 응답 본문에 데이터X
- 205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
- 206 : Partial Content. 성공했으나 일부 범위의 데이터만 반환
[ 3xx - 리다이렉션 ]
300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우임
- 301 : Moved Permanently. 요청한 자원이 새 URL에 존재
- 303 : See Other. 요청한 자원이 임시 주소에 존재
- 304 : Not Modified. 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고
[ 4xx - 클라이언트 에러 ]
400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우임
- 400 : Bad Request. 잘못된 요청
- 401 : Unauthorized. 권한 없이 요청.
- 403 : Forbidden. 서버에서 해당 자원에 대해 접근 금지
- 405 : Method Not Allowed. 허용되지 않은 요청 메서드
- 409 : Conflict. 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌
[ 5xx - 서버 에러 ]
500번대 상태 코드는 서버 쪽에서 오류가 난 경우임
- 501 : Not Implemented. 요청한 동작에 대해 서버가 수행할 수 없는 경우
- 503 : Service Unavailable. 서버가 과부하 또는 유지 보수로 내려간 경우
참고
본 글은 훈훈한 자바스크립트 강의의 내용과 참고글을 참고해 정리한 글입니다
'Network > Network' 카테고리의 다른 글
[Network] TCP와 UDP란? TCP, UDP의 차이 (0) | 2024.03.05 |
---|---|
[Network] localhost란? (0) | 2023.03.20 |