서로 간의 통신을 위한 약속, 규칙
주고 받을 데이터에 대한 형식을 정의한것
데이터를 어떻게 주고받을지 약속하지 않으면 해석할 수 없다. 따라서 약속이 필요하다.
실생활에서 편지와 편지봉투라고 생각하면 된다. 편지에 받는사람,주소가 있어야 보낼 수 있는거처럼 데이터간에도 이러한 약속이 있어야한다고 생각하면 편하다.
Hyper Text Transfer Protocol의 약자로 Text를 전송하기 위한 프로토콜이다.
Hyper Text이므로 사실상 html이라고 봐도 된다.
1)단순하고 읽기 쉽고 텍스트 기반의 프로토콜이다.
Huamn Readable하다. 즉 사람이 읽을 수 있다.
2)상태를 유지하지 않는다. (stateless)
클라이언트 정보를 저장하지않는다.
같은 클라이언트가 요청을 2번보내도 서버는 이 요청이 같은 클라이언트인지 구분할 수 없다.
왜냐하면 상태를 저장하지않기 때문이다. 이를 보안하기위해 쿠키와 세션을 이용한다.
HTTP 응답 메세지는 헤더하고 바디로 구분된다
헤더는 대소문자 구분안한다. 공백도 무시된다. 여러개 나올 수 있다.
우리가 확장한 커스템 헤더 추가할 수 있는 기능이 있다.
우리가 URL를 요청하면 실제로는 요청메시지가 작성되어서 서버로 간다. HTTP 요청메세지가 서버로 가면 서버를 요청을 받아서 응답을 보낸다.
응답 메세지를 좀 더 자세히 살펴보자
HTTP/1.1 200 OK // 200은 상태코드
Content-Length : 44
Content-Type : text/html
Date : Sat, 20 OCt 2021 19:03:38 GMT
<html>
<head></head>
<body>
Hello
</body>
</html>
HTTP/1.1 200 OK에서 200은 상태코드이고 OK은 상태를 설명하는 것이다. 이 줄은 상태 라인(status line)이라고 부른다. 상태코드가 2xx대이면 Success를 의미한다. 300번대는 다른 URL로 요청하라는 뜻이다. 400번대,500번대는 에러를 의미한다. 400번대는 client Error이고 500번대는 Server Error이다. 100번대는 HTTP/1.1에 추가된 것이다 클라이언트와 서버간의 정보교환이 목적이다. 정리하면 다음과 같다.
1xx - 클라이언트 서버간의 정보교환
2xx - Success
3xx - Redirect
4xx - Client Error (ex: 404 NOT Found)
5xx - Server Error
헤더와 바디 사이에는 빈줄이 하나 들어가있다. 헤더와 바디를 구분하는 줄이다.
따라서 빈줄이 나오면 헤더가 끝났다고 생각하면 된다.
요청메소드에는 여러가지가 있지만 대표적으로 GET과 POST를 알아보자
GET은 리소스를 요청해서 얻어올려고 만든 즉 REad하기 위한 메시지이다 따라서 메세지가 없다.
그라나 쿼리스트링으로 데이터를 보낼 수 있다.
POST는 서버에 전송한 data를 바디에 담고 있다. write라고 생각하면 된다. 정리하면 다음과 같다.
GET
- 리소스 얻어올때, body없음
- Query String을 통해 데이터를 전달한다(소용량)
- URL에 데이터가 노출되므로 보안에 취약하다.
- 데이터 공유에 유리하다. 전달에 유리하다.
POST
- 서버에 정보를 제공할때, body에 서버에 전송할 data가 있다.
- 전송 데이터 크기의 제한이 없다(대용량)
- 데이터를 요청 메시지의 body에 담아 전송
- 보안에 유리.데이터공유에는 불리