HTTP(Hypertext Transfer Protocol)
인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동
HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계
HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디어, 텍스트 문서 등 여러 종류가 있다.
하이퍼텍스트 기반으로(Hypertext) 데이터를 전송하겠다(Transfer)
=
링크 기반으로 데이터에 접속하겠다는 의미
TCP (전송 제어 프로토콜)은 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다. TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해준다. Vint CERF와 Bob Kahn (당시 DARPA 과학자)는 TCP를 1970년 대에 설계하였다.
IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을
식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다.
통신 프로토콜을 풀어보면 "내가 이렇게 줄테니 너는 이렇게 받아" 라고 이해하면 된다.
웹에서는 브라우저와 서버 간에 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용한다.
HTTP프로토콜의 특징
상태가 없는(stateless) 프로토콜이다.
여기서 상태가 없다는 말은, 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말이다.
이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 말이다.
이러한 특징 때문에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고,
다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생긴다.
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번입니다.
HTTP Request & HTTP Response
데이터를 주고 받기 위해서는 요청(Request)을 보내고 응답(Response)을 받아야 한다.
요청과 응답을 이해하기 위해서는 클라이언트(Client)와 서버(Server)를 이해해야 한다
클라이언트란 요청을 보내는 쪽을 의미(일반적 웹 관점에서는 브라우저를 의미)
서버란 요청을 받는 쪽을 의미(일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미)
장점 :
불특정 다수를 대상으로 하는 서비스에 적합
수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리할 수 있다.
단점 :
연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다.
이러한 HTTP의 특징을 stateless라고 하는데, Connectionless 로 부터 파생되는 특징이라고 할 수 있다.
클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장에 문제가 생긴다.
클라이언트가 과거에 로그인을 성공하더라도 로그 정보를 유지할 수가 없다. HTTP는 cookie를 이용해서 이 문제를 해결하고 있다.
무상태(Stateless)
stateful은 서버가 클라이언트의 이전 상태로 보존한다는 의미
반대로 무상태는 서버가 클라이언트의 이전 상태를 보존하지 않는다는 의미
stateful은 우리가 일상에서 대화를 할 때와 비슷하다.
대화를 주고 받을 때 마다(요청과 응답) 상대는 문맥의 상태를 유지
상태를 유지해야 하므로 항상 같은 서버가 유지되어야함.
stateless에서는 대화가 오고 갈 때 마다 상대는 그 문맥의 상태를 모른 체 대화를 한다고 보면 된다
혹은 상대가 계속 바뀐다고 볼 수도 있다
상태를 보관하지 않으므로 클라이언트의 요청에 어느서버가 응답해도 상관 X
비연결성(Connectionless)
클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지 하지 않는것
자원을 효율적으로 관리하고, 수많은 클라이언트의 요청에도 대응할 수 있다.
하지만 한계도 있다. 연결이 끊어짐에 따라 새로 연결될 때 TCP/IP연결을 새로 맺어야 하므로
3-way handshake에 따른 시간이 추가
HTML뿐 아니라 JS,CSS,이미지 등 수많은 자원이 함께 다운로드 된다.
HTTP 요청 메소드
요청하는 데이터에 특정 동작을 수행하고 싶을때 이용한다.
HTTP 요청 메소드는 HTTP Verbs라고도 불리우며 아래와 같은 주요 메소드를 갖고 있다.
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원에 대한 변경
- DELETE : 존재하는 자원에 대한 삭제
기타 요청 메소드는 다음과 같다.
- HEAD : 서버 헤더 정보를 획득. GET과 비슷하나 Response Body를 반환하지 않음
- OPTIONS : 서버 옵션들을 확인하기 위한 요청. CORS에서 사용
CORS (Cross-Origin Resource Sharing)
직역하면 교차 출처 리소스 공유라고 해석
여기서 교차출처라는것은 '다른출처' 로도 이해할 수 있겠다.
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여,
한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록
브라우저에 알려주는 체제이다.
웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행
'개발' 카테고리의 다른 글
인증(Authentication), 인가(Authorization) (0) | 2022.12.02 |
---|---|
DB 트랜잭션(Transaction) (0) | 2022.11.30 |
API란 ? (0) | 2022.11.21 |
JWT토큰 이란 ? (0) | 2022.11.20 |
원형 이미지 css html (0) | 2022.11.02 |
댓글