-
HTTP란 Hyper Text Transfer Protocol의 두문자어로, 웹 브라우저와 웹 서버가 HTML로 작성된 웹 페이지나 동영상, 음성 파일 등등을 주고받기 위한 프로토콜(통신규약)입니다.
HTTP 통신
HTTP에서는 클라이언트가 서버에 요청 메시지를 보내고 이에 대해 서버가 응답 메시지를 반환합니다.
좀 더 쉽게 풀어보면 "서버야 나는 이렇게 줄 테니 너는 이렇게 받고 나는 너가 준 거 그렇게 받을게" 라고 통신 규약에 맞게 데이터를 주고받는 것입니다.
HTTP 프로토콜의 특징
서버는 응답 메시지를 반환한 후에 초기 상태로 돌아갑니다. 이 때 서버는 클라이언트의 상태를 저장하지 않습니다.
즉, HTTP 프로토콜은 상태가 없는 프로토콜 입니다. 여기서 상태가 없다라는 말은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말이고, 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 말입니다.
위의 그림은 설명을 돕기 위한 사진입니다.
예를 들어 이 그림처럼 클라이언트가 커피먹으러 가자고 서버에게 요청해서 "좋아!" 라는 응답을 잘 받아왔지만 그 다음번에 "커피 먹으러 오늘 가자!"라고 요청을 한다면 서버는 이 전에 "커피 먹으러 갈래?" 라는 요청을 기억하지 못하기 때문에 클라이언트가 원하는 응답을 줄 수가 없게 되는 것입니다.
이러한 특징 덕분에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생깁니다.
HTTP 프로토콜은 전송 계층 프로토콜로 TCP를 사용하고 네트워크 계층 프로토콜로 IP를 사용하는 것이 일반적입니다.
이 두 계층을 합쳐서 TCP/IP라는 이름으로 부르고, TCP/IP에서는 IP주소를 사용해서 통신할 컴퓨터를 결정합니다. 그리고 포트 번호를 사용해서 그 컴퓨터의 어떤 프로그램과 통신할지를 결정합니다. HTTP에서는 기본적으로 80번 포트를 사용합니다.
HTTP 요청 메시지 ( request )
HTTP 요청 메시지( request )는 다음 그림과 같이 요청 행, 요청 헤더, 메시지 본문이라는 세 부분으로 구성되어 있습니다.
다음은 HTTP 요청 메시지의 한 부분인 요청 행의 구체적인 예입니다.
- GET http://www.naver.com HTTP/1.1
이 요청 행은 다음과 같은 세 가지 정보를 담고 있습니다.
- GET : 요청 메서드
- http://www.naver.com : URL
- HTTP/1.1 : HTTP의 버전
요청 메서드는 송수신 방법을 뜻하며, GET, POST, PUT, DELETE 등이 요청 메서드에 속합니다.
웹 페이지에서는 대부분의 통신에 GET 메서드를 사용하며, 폼 등을 사용해서 데이터를 전송 할 때는 POST 메서드를 사용합니다.
GET (존재하는 자원에 대한 요청)
웹 서버에 페이지를 요청합니다. 요청할 때 필요한 데이터는 URL에 덧붙여 보내며 텍스트 데이터만 전송할 수 있습니다.
POST (새로운 자원을 생성)
서버의 데이터를 갱신하거나 보내는 데이터의 양이 많을 때, 비밀번호 등의 개인 정보를 보낼 때 사용합니다.
요청할 때 필요한 데이터는 메시지 본문에 담아서 보내며 텍스트 데이터와 바이너리 데이터를 모두 보낼 수 있습니다.
PUT (존재하는 자원에 대한 변경)
요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체합니다.
PUT메서드는 멱등성을 가집니다. PUT은 한 번을 보내도, 여러 번을 연속으로 보내도 같은 효과를 보입니다. 즉, 부수 효과가 없습니다.
DELETE (존재하는 자원에 대한 삭제)
웹 리소스를 제거할 때 사용합니다. 하지만, DELETE의 경우 서버에서 클라이언트의 요청을 무시 가능하기 때문에 실제로 삭제되지 않았지만, 클라이언트는 파일이 삭제 되었다고 생각할 수 있습니다.
요청 헤더
요청 헤더에는 메시지의 제어 정보, 메시지 본문에 저장한 데이터 정보(데이터 종류나 문자 코드) 등이 텍스트 형식으로 저장됩니다.
헤더의 문자열은 Host : http://www.naver.com 처럼 필드 이륾 : 필드 내용 을 쌍으로 구성한 필드의 집합으로 구성되어 있습니다.
메시지 본분
메시지 본문에는 보내는 데이터가 저장됩니다. 데이터 형식은 요청 헤더에 지정된 타입을 따릅니다.
HTTP 응답 메시지 ( response )
HTTP 응답 메시지는 다음 그림과 같이 응답 행, 응답 헤더, 메시지 본문이라는 세 부분으로 구성 됩니다.
응답 행
다음은 HTTP 응답 메시지의 한 부분인 응답 행의 구체적인 예입니다.
- HTTP/1.1 200 OK
이 응답 행은 다음과 같은 세 가지 정보를 담고 있습니다
- HTTP/1.1 : HTTP 버전
- 200 : 상태 코드
- OK : 보충 메시지
상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지를 뜻합니다.
아래의 표는 주요 상태 코드와 상태 설명의 목록 입니다.
분류 상태 코드 상태 설명 내용 성공 200 OK 요청을 성공함 클라이언트 오류 401 unauthorized 인증되지 않음 403 Forbidden 액세스가 허용되지 않음 404 Not Found 요청한 리소스를 찾지 못함 408 Request Timeout 요청 시간을 초과함 서버 오류 500 Internal Server Error 서버 내부에서 오류가 발생함 서버 오류 503 Service Unavailable 서비스를 일시적으로 사용할 수 없음 응답 헤더
응답 헤더에는 메시지의 제어 정보, 메시지 본문에 저장한 데이터 정보 (데이터 종류나 문자 코드) 등이 텍스트 형식으로 저장됩니다.
메시지 본문
메시지 본문에는 받을 데이터가 담기며, 그 데이터의 형식은 요청 헤더에 지정된 타입을 따릅니다.
GET 메서드 요청에 대한 응답 메시지는 HTML파일, CSS파일, JavaScript파일, 이미지 파일처럼 웹 페이지를 정의하는 데이터 입니다.
HTTP 에 대해서 정리하기
-
HTTP란 브라우저와 서버가 통신할 수 있도록 만들어주는 여러 프로토콜 가운데 한 종류 입니다.
-
클라이언트와 서버 간 요청과 응답이 이루어지는 과정입니다.
-
서버는 클라이언트의 요청에 대해 무조건 응답을 돌려 주어야 합니다.
-
서버로 데이터를 전송하여 새로운 리소스를 생성하고자 할 때 사용해야 하는 HTTP 메서드는 POST가 있습니다.
-
HTTP 통신에는 stateless, connectionless 라는 두 가지 속성이 있습니다.
>> stateless ( 무상태성 )는 모든 http 요청은 독립적이므로 서버는 클라이언트의 상태를 기억하지 못해서 지속적인 state라는 것이 없다는 속성입니다.
>> connectionless ( 무연결성 )는 응답이 완료가 되면 클라이언트와 서버의 연결이 끊어지는 특징을 가진 속성입니다.
'개발' 카테고리의 다른 글
JavaScript 비동기 처리를 위한 Promise (0) 2020.05.19 JavaScript 비동기 처리와 콜백 함수 (0) 2020.05.19 Object.create()와 constructor (2) 2020.05.11 ES6 - class로 작성한 OOP (0) 2020.05.08 화살표 함수( Arrow Function )에서의 this 바인딩 (0) 2020.04.29