-
[네트워크]HTTP란?카테고리 없음 2022. 5. 18. 23:54
HTTP(HyperText Transfer Protocol)란 : 서버와 클라이언트가 텍스트, 이미지, 동영상등을 주고 받을 때 사용하는 네트워크다. 오늘날 웹을 구성하는 프로토콜로 구글, 네이버 등은 모두 HTTP를 기반으로 동작한다.
HTTPS란 : 기존 HTTP에 Security를 더해, 안전하게 데이터를 주고받기 위한 네트워크다.
RESTful API : JSON과 HTTP가 함께 사용하며, 데이터를 효율적으로 주고받기 위해 탄생했다.
SOAP : XML과 HTTP를 함께 사용한다.
HTTP작동방식
클라이언트 ----> 서버 : HTTP요청
클라이언트 <---- 서버 : HTTP응답 (나 여기있어! 신호주기)
클라이언트 <---- 서버 : HTTP응답 데이터 (실제 요청한 것에 대한 응답)
HTTP는 각 요청이 소켓 1개를 점유하여 요청에 대한 식별이 가능하다. 하지만 HTTP는 Stateless한 통신방식이라 클라이언트는 HTTP 요청을 보내기 직전까지 타겟 서버가 실제로 동작하는지 알 수 없다. 또한, 서버가 요청을 받더라도 시간안에 응답을 하지 않으면 서버가 동작중인건지, 시간이 오래걸려서 에러가 나는건지 알 수가 없다. 일정시간아나에 HTTP응답을 받지 못하면 타임아웃으로 간주하고 요청에 실패한 것으로 처리한다.
Stateless
HTTP는 요청메시지를 보내기 전까지 요청을 받는 컴퓨터랑 연결이 가능한지, 응답을 받을 수 있는지 모른다. 이것을 Stateless 라고 부른다. 한국어로 하면 '상태가 없는' 상태인 것이다.
TCP
그럼, 상태가 있는 프로토콜은 무엇일까? 바로, TCP이다. TCP는 HTTP의 하위계층으로 존재한다. TCP는 클라이언트와 서버가 메시지를 주고받으며 연결을 하므로 연결을 맺는 순간부터 끊기는 순간까지 감지할 수 있다. 또한, TCP는 텍스트를 사용하는 HTTP와 달리 바이너리를 사용해서 가볍고, 그렇기에 더 빠르다. 하지만 TCP는 모든 요청이 1개의 소켓을 사용하여 별도로 ID식별을 하지 않으면 요청이 소켓 안에서 섞이게된다. 즉, 어떤 요청에 대한 응답인지 구분하기가 어렵게 된다. 타임아웃 기능도 직접 구현해야한다. 따라서 TCP는 많은 데이터가 많아 메시지 처리시간이 로직처리보다 오래걸리는 경우에 사용하는 것을 권장한다 (게임 / 금융 서비스 등).
TCP 작동방식
클라이언트 ---> 서버 : SYN (synchronize - 연결시도)
클라이언트 <--- 서버 : SYN/ACK (acknowledge - 연결수락)
클라이언트 ---> 서버 : ACK (서로 연결을 맺음!)
클라이언트 ---> 서버 : HTTP요청
클라이언트 <--- 서버 : HTTP응답
클라이언트 <--- 서버 : HTTP응답데이터
클라이언트 ---> 서버 : ACK
클라이언트 <--- 서버 : FIN (finish - 연결종료)
클라이언트 ---> 서버 : 연결종료
URL
표기 방식 : http://www.example.com/경로/파일
HTTP에서 통신할 대상(컴퓨터)를 식별할 때 사용한다. 컴퓨터는 IP로 통신을 하지만, 사람이 숫자로 된 IP로 어딘가에 접속하기엔 너무 복잡하기 때문에 이를 DNS를 거쳐 우리가 아는 tistory.com과 같은 단어로 바꾼다. 실제 클라이언트는 DNS로부터 받은 IP주소로 서버접속을 요청하는 것이다. 또한 하나의 URL은 여러 IP주소를 가질 수 있는데, 클라이언트가 많을 경우 DNS가 여러 IP주소 중 하나를 보내줘 서버 부하를 막을 수 있다. 이것을 로드밸런싱 혹은 라운드 로빈 이라고 부른다.
URI
표기방식 : scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
특정 문서나 영상등의 자원 주소를 나타는 표기법. XML에서도 사용한다. URL처럼 DNS방식을 사용하지 않아 유일하다. URL이 자원의 주소를 나타낸다면, URI는 식별자까지 포함하는 거라고 보면된다. URL ∋ URI
참고 :
https://velog.io/@torang/URL%EA%B3%BC-URI%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90#:~:text=URL(Uniform%20Resource%20Locator)%EC%9D%80,%EC%9D%84%20%EC%9D%98%EB%AF%B8%EB%A5%BC%20%ED%8F%AC%ED%95%A8%ED%95%9C%EB%8B%A4.
HTTP 버전
가장 많이 사용하는 버전은 1.0, 1.1, 2.0이 있다. 1.1버전은 1.0버전과 비교했을 때 소켓 재사용을 요청하는 keep-alive헤더 추가와 언어, 인코딩 지원을 위한 헤더가 추가되었다. 그래서 오늘날 대부분은 HTTP 1.1버전을 사용한다. 1.1버전은 하나의 요청에 하나의 응답만 보낼 수 있다. 하지만, 우리가 웹 페이지 하나를 볼 때 하나의 요청을 보내는 것이 아니라 기본 10개 이상의 요청을 보내고 많게는 100단위의 요청을 보내게 된다. 이를 해결하기 위해 응답을 병렬로 보내고 오버헤드를 줄이기 위해 등장한 것이 2.0버전이다.
반응형