http(Hyper Text Transfer Protocol) 하이퍼 텍스트 문서(html)를 전송하기 위한 통신 규약(protocol)이다.
기본적으로 웹 클라이언트와 서버간의 통신을 위해 만들어 졌다.
지금은 html뿐만 아니라 img, mp4등 다양한 미디어 파일의 전송도 가능하다.
Request - Response
클라이언트가 HTTP 요청을 서버에 보내면, 서버는 요청을 처리한 후 결과에 따른 HTTP 응답을 클라이언트에게 보낸다. 즉 요청한 내용에만 필요한 데이터를 보낸다. 요청이 없는경우에는 통신이 없다. 서버와 불필요한 접촉을 유지하지 않게 된다.
클라이언트과 서버 사이의 소통은 평문(ASCII) 메시지로 이루어진다.
Stateless
각 통신은 상태가 없다. 한마디로 이전 통신에 대한 결과를 절대 알수 없다. 때문에 I/O 디자인이 편하다.
매 요청 마다 다른 요청에 대한 결과를 고려할 필요가 없으며, 하나의 기능을 하도록 디자인 할 수 있다.
하지만, 상태가 없는 특징으로 인해서 같은 데이터를 매번 요청해야 하는 경우도 생긴다.
이런 경우에는 session과 cookie를 통해서 데이터를 저장 할 수 있다.
캐싱
요청한 파일을 캐싱하여 전달 받을 수 있다. 필요에 따라 캐싱을 무시할 수도 있다.
인증
headers에 토큰을 심어 내가 유효한 사용자인지 인증 할 수 있다.
프록시를 통한 터널링
프록시를 통해 http요청을 좀 다른 요청으로 보낼 수 있다.
세션
서버의 상태를 구독할 수 있도록 한다. 쇼핑몰에서 검색한 물건을 담아두는 역할을 하는게 가능한 것은 세션 덕분이다.
cross origin
(CORS) Cross Origin Resource Sharing이 발생하는 이유, 다른 포트나 ip의 서버에서 데이터의 흐름을 막게된다. 해당 요청을 받을 수 있도록 Access-Control-Allow-Origin
을 설정해주는 방식으로 해결 할 수 있다.
cros error
크게method, headers, body
로 이루어져 있다.
method
는 우리가 요청하는 방식으로 GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (en-US), PATCH
가 있다. CRUD를 구현하기 위해서는 GET, PUT, POST, DELETE
만 잘 사용해도 가능 하다.
header
는 사용자 인증이나, 데이터의 타입등 현재 요청하는 내용의 명세로 볼 수 있다.
body
에는 내가 보내는 데이터, 받는 데이터 등이 담겨 있다.
잘 보고 갑니다~ :)