HyperText(링크) Transfer Protocol 의 약자이다.
하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 Protocol (통신 규약)인데, 쉽게 생각하면 웹 상에서 통신을 할 때 어떤 형식으로 통신을 하자고 정해놓은 약속이다.
프론트엔드 서버 ←→ 클라이언트 간의 통신
프론트엔드 서버 ←→ 백엔드 서버 간의 통신
HTTP는 TCP / IP 기반 (무슨말? )
두개의 다른 서버가 소통하려면 공통의 언어가 필요해서
HTTP 라는 양식을 정해서 서로 전달하고 받자! 하고 언어를 정해놓은 것이다.
요청(request) ← → 응답(response) 의 구조로 되어있다.
클라이언트가 서버에 HTTP request 를 보내고,
서버가 HTTP response 를 돌려보낸다.
클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어진다.
HTTP 는 stateless 이다. 즉 State 를 저장하지 않는다.
위의 말의 의미는 요청/응답하는 정보가 저장되지 않는다는 뜻이다. (여러가지의 요청/응답 과정을 거칠 때 그것들끼리 연결되서 작동하는것이 아니다. )
클라이언트가 요청을 보내고 응답을 받은 후, 그 다음에 다시 요청을 보낼 때 그 전에 보낸 요청/응답에 대해 알지 못한다.
해당 request 가 어떤 action 을 의미하는지 정보를 담는다. request target (url) 어떤 곳에다가 요청하는지를 담는다.
해당 request에 대한 추가 정보를 담고있는 부분이다.
Key:Value 값으로 되어있다.
Request Target도 주소. Host 도 주소. 두개를 합쳐서 보고 서버가 알게 된다.
데이터가 담겨있는 부분이다. 여기서 내가 가졌던 의문은 Request 를 하는데 왜 정보를 담아서 보내야되지?하는 것이였다.
→ 클라이언트의 정보를 넘겨줘야, 서버에서 어떤 정보를 담아서 보내줘야할지 알려줄 수 있는 request들이 많다.
예를들면 유저의 로그인 정보를 담아서 서버쪽에 이런 사람이 로그인했다, 고 알려주면 서버측에서 그 사람의 프로필 사진은 뭔지, 그 사람이 어떤 사람을 팔로우하는지, 그런 정보들을 담아서 돌려보내줄것이다.
request 도 데이터를 담아서 요청할 수 있고, response 에서 데이터를 담아서 줄수 있다.
위에서 얘기한 어떤 사항들을 요청하는지는
Content-type 에 의해서 결정된다.
이런 내용들은 개발자도구 Network 패널에서 모두 확인 가능하다.
Request 의 예시
POST /payment-sync HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3
{
"imp_uid": "imp_1234567890",
"merchant_uid": "order_id_8237352",
"status": "paid"
}
Response 도 request와 마찬가지로 크게 3부분으로 구성되어있다.
User-Agent
대신에 Server
헤더가 사용된다.GET
POST
PUT
DELETE