HTTP는 Hypertext Transfer Protocol이다. "전송하다"라는 의미를 가진 Transfer과 그 앞에 Hypertext가 붙어 하이퍼텍스트 기반으로 데이터를 전송하겠다는 의미이다.
웹을 개발하는 사람이라면 누구나 다 알아야 하는 통신 프로토콜이다.
웹에서의 HTTP 프로토콜은 브라우저와 서버 간(서버 - 클라이언트)에 데이터를 주고받기 위해 사용된다.
HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다. 인터넷상에서 흔히 볼 수 있는 HTML로 작성된 문서는 HTTP로 보낼 수 있는 데이터의 한 종류일 뿐이다. 이미지, 동영상, 오디오, 텍스트 문서들 등 종류를 가리지 않는다.
클라이언트의 요청에 대해 서버가 응답을 마치고 나면 연결을 끊어버린다. 클라이언트가 추가적인 요청을 하면 새로운 연결을 통해서 응답을 하는 특징이 있다.
비연결성 (Connectionless)의 특성에 파생된 특성이다. 서버와 클라이언트는 하나의 요청이 진행되는 동안만 서로 인지한다.
URL(Uniform Resource Locators)은 서버에 자원을 요청하기 위해 입력하는 영문 주소이다.
이 URL을 이용하여 서버에 특정 데이터를 요청할 수 있다.
아래의 HTTP request methods를 이용한다.
GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.
HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다. 따라서 이런 이유로 사용하면 안전하다고 간주된다. 즉, 데이터의 변형의 위험없이 사용할 수 있다는 뜻이다. 게다가 GET 요청은 idempotent하다. 즉, 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다. 그러므로 GET을 데이터를 변경하는 등의 안전하지 않은 연산에 사용하면 안된다.
POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다. POST 요청은 안전하지도 않고 idempotent하지도 않다. 다시 말해서 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다는 것이다. 그러므로 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.
참고로 때에 따라서는 POST 메서드로 PUT, DELETE의 동작도 수행할 수 있다.
HEAD
GET과 같은 요청이지만, 자료에 대한 정보(meta-information)만을 받음
PATCH
해당 URL의 자료를 수정(자료 일부 수정)
TRACE
이전에 요청한 내용 (루프백 메시지)을 호출하기 위해 테스트용으로 사용
OPTIONS
서버가 특정 URL에 대해 어떠한 HTTP Method를 지원하는지 물음
CONNECT
프록시가 사용하는 요청
OPTIONS
목정 리소스의 통신을 설정하는 데 사용
앞에서 살펴본 URL과 요청 메서드가 클라이언트에서 설정해야 할 정보라면 HTTP 상태 코드(HTTP Status Code)는 서버에서 설정해주는 응답(Response) 정보이다.
프론트엔드 개발자 입장에서는 더욱이 중요한 이유가 이 상태 코드로 에러 처리를 할 수 있기 때문이다. 간단한 예시를 들어 아래와 같이 사용자 목록을 받아오는 GET 메서드 요청을 날려보겠다.
http://domain.com/users
위 요청을 보내고 나면 서버에서 응답으로 오는 상태 코드가 크게 2개로 나뉜다, 200(성공)과 404(실패).
따라서, 이 HTTP 상태 코드로 추가적인 로직을 구현할 수 있다.
200번대의 상태 코드는 대부분 성공을 의미한다.
200 : GET 요청에 대한 성공
204 : No Content. 성공했으나 응답 본문에 데이터가 없음
205 : Reset Content. 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
206 : Partial Conent. 성공했으나 일부 범위의 데이터만 반환
300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우이다.
301 : Moved Permanently, 요청한 자원이 새 URL에 존재
303 : See Other, 요청한 자원이 임시 주소에 존재
304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인
400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생한다. 가장 익숙한 상태 코드는 404 코드이다. 요청한 자원이 서버에 없다는 의미이다.
400 : Bad Request, 잘못된 요청
401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
405 : Method Not Allowed, 허용되지 않은 요청 메서드
409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌
500번대 상태 코드는 서버 쪽에서 오류가 난 경우이다.
501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우