서버(Apache, Nginx, Nginx 등)와 클라이언트(브라우저)가 인터넷 상에서 HTML문서를 주고받을 수 있도록 하기 위해 만든 통신 규약을 말하며, Tim Berners Lee가 1991년에 발명하였다.
프론트앤드 서버와 클라이언트간의 통신에 사용되며, 또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다.
Http통신은 클라이언트가 데이터를 요청(request)하면 그 요청을 처리하여 서버가 다시 클라이언트에게 응답(response)하는 큰 흐름을 따른다.
어떠한 데이터의 형태도 주고받을 수 있다.
(응답만 주구장창 보내는 통신방법도 있다.)
데이터의 전송 방법을 정의하는 역할을 한다. 두가지 속성, action 과 method, 을 가진다.
서버에게 요청의 종류를 알려주기 위해서 사용한다. status와method는 꼭 개발자가 정해야 한다.
GET (..select, fetch) : 서버로부터 데이터를 가져올때 사용한다.
POST (..add, insert) : 클라이언트가 서버에 데이터를 새로 추가할 때 사용한다.
PUT (..update) : 서버에 이미 존재하는 데이터를 업데이트 할 때 사용한다.
DELETE : 서버의 데이터를 삭제할 때 사용한다.
OPTIONS : 해당 엔드포인트가 어떤 http메소드를 서포트 하는지 모를때, 메소드 정보를 요청하기 위해 사용.
크게 3부분으로 구성된다.
start line(request line) : Http request의 첫 라인으로써, 3 부분으로 구성된다
GET
, POST
등 action을 정의.GET /search HTTP/1.1
headers : request에 대한 meta정보를 담고 있으며, key:value 값으로 되어있다.
Host : 요청이 전송되는 target의 host url: 예를 들어, google.com
User-Agent : 요청을 보내는 클라이언트의 대한 정보: 사용하는 웹 브라우저와 버전, OS 등
Accept : 해당 요청이 받을 수 있는 응답(response) 타입.
(조건부 요청을 허용: (accept-, If-), 모든 요청 허용:(/))
Connection : 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분. (Keep-alive or cancel)
Content-Type : 해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json.
Content-Length :메세지 body의 길이.
HTTP/1.1 404 Not Found
GET
은 body가 대부분 없다.기본적인 구조는 request와 비슷하다.
response header의 예시:
Http1.1 에서 업그레이드된 버전으로, 2015년에 등장했다.
이전 버전에 비해서 더욱 빠르고 효율적이며 secure한 특징을 가진다.
서버 ~ 백엔드 API ~ 프론트 ~ 클라이언트
유저가 로그인 기능을 사용하고자 할 때, 프론트에게 입력한 정보를 전달한다. 프론트는 이 정보를 백엔드에 전달하고, 백엔드api가 원격호출로 http요청을 서버에 보낸다. 서버에 저장된 해당 기능의 함수가 http요청에 따라 호출되고, 다시 백엔드가 이 정보를 받아 처리를 하여 프론트에게, 그리고 프론트가 클라이언트에게 응답해 준다
참고링크:
Http의 정의: https://developer.mozilla.org/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data
Http동작과 메세지 형식: https://gmlwjd9405.github.io/2019/04/17/what-is-http-protocol.html
REST API 설계 가이드: https://sanghaklee.tistory.com/57
헤더 세부 설명: https://goddaehee.tistory.com/169
동영상:
Traversy Media: https://youtu.be/iYM2zFP3Zn0