간단한 프로토콜 HTTP
2022. 3. 11. 16:56ㆍCS/네트워크
Created: 2022년 3월 7일 오후 9:54
HTTP는 클라이언트와 서버간에 통신을 한다.
- 클라이언트 : 리소스가 필요하다고 요구하는 쪽
- 텍스트, 이미지등
- 서버 : 리소스를 제공하는 쪽
http는 클라이언트와 서버의 역할을 명확하게 구별하고 있습니다.
request와 response를 교환하여 성립
클라이언트로부터 리퀘스트가 송신되며, 그 결과가 서버로 부터 리스폰스로 되돌아옴.
반드시 클라이언트 측으로부터 통신이 시작됨 → 서버측은 리퀘스트를 받지 않고서는 리스톤스를 송신하는 일은 없음
- 리퀘스트 예시
GET /index.html HTTP /1.1
Host: www.naver.com
- GET : http 메소드
- “/index.html” : 리소스 uri
- HTTP /1.1: http 버전
http 리퀘스트 구성
- 메소드
- URI
- 프로토콜 버전
- 옵션
- 리퀘스트 헤더 필드
- 엔티티
- 리스폰스 예시
HTTP /1.1 200 OK //버전, 상태코드
Date: Tue, 19 May 2021 01:20:12 GMT //헤더필드
Content-Lenth: 362
Content-Type: text/html
//body
<htm>
...
http 리스폰스 구성
- 프로토콜 버전
- 상태코드, 상태코드에 따른 프레이즈
- 옵션
- 리스폰스 헤더필드
- 바디
HTTP는 상태를 유지하지 않는 프로토콜
- http는 상태를 계속 유지하지 않는 스테이트리스 프로토콜입니다.
- stateless의 장점
- 서버의 CPU나 메모리같은 리소스의 소비를 억제할 수 있음
- 단순한 프로토콜이기 때문에 다양한 곳에서 이용 됨
- stateless의 장점
- 리퀘스트와 리스폰스를 교환하는 동안에 상태(Stateless)를 관리하지 않습니다.
- 이게 무슨 뜻??
- → 이전에 보냇떤 리퀘스트나 이미 되돌려준 리스폰스에 대해서는 전혀 기억하지 않습니다.
- 새로운 리퀘스트가 보내질 때 마다 새로운 리스폰스가 생성됨
- 프로토콜로써는 과거의 리퀘스트나 리스폰스 정보를 전혀 가지고 있지 않음
- 많은 데이터를 매우 빠르고 확실하게 처리하는 범위성을 확보하기 위해서 간단히 설계돼있음
- 하지만 이는 웹이 진화 되면서 스테이트리스 특성만으로는 처리하기 어려운 일이 증가하게 되었음
- 쇼핑물 로그인 → 다른 페이지로 이동하더라도 로그인 상태를 유지할 필요가 있음
- 누가 어떤 리퀘스트를 보냈는지를 파악하기 위해 상태를 유지할 필요가 있습니다.
- 따라서 상태를 계속 유지하고 싶은 욕구에 부응하기 위해서 쿠키라는 기술이 도입됐음
리퀘스트 URI로 리소스를 식별
- http는 URI를 사용하여 인터넷 상의 리소스를 지정함.
- 클라이언트는 리소스를 호출할 때 마다 리퀘스트를 송신할 때에 리퀘스트 안에 URI를 포함해야함.
- ex ) js 에서 fetch api로 request 보내기
getMyCouponList: (memberNum) => {
return fetch(`"http://localhost:4000/cp"/hav/${memberNum}`, {
method: "get",
headers: {
"Content-type": "application/json",
},
});
},
HTTP메소드
GET
- 리소스 획득
- 리퀘스트 URI로 식별된 리소스를 가져올 수 있도록 요구함
POST
- 엔티티를 전송
- 데이터의 처리한 결과를 리스폰스로 줌
PUT
- 파일 전송
- FTP에 의한 파일 업로드와 같이, 리퀘스트 중에 포함된 엔티티를 리퀘스트를 URI로 지정한 곳에 보존하도록 요구
- REST와 같이 웹끼리 연계하는 설계 양식을 사용할 때 이용하는 경우가 있음
HEAD
- HEAD메소드를 GET같은 기능이지만 메시지 바디는 돌려주지 않음
- URI 유효성, 리소스 갱신시간을 확인하는 목적
DELETE
- 파일을 삭제하기 위해서 사용됨
- URI로 지정된 리소스의 삭제를 요구함
OPTIONS
- 제공하고 있는 메소드 문의
- 리퀘스트 URI로 지정한 리소스가 제공하고 있는 메소드를 조사하기 위해 사용됨
TRACE
- 경로 조사
- Web서버에서 접속해서 자신에게 통신을 되돌려 받는 루프백을 발생시킴
- 보통 사용되고 있지 않음.
CONNET
- 프록시에 터널 접속 확립을 요합으러써, TCP 통신을 터널링 시키기 위해서 사용
- SSL TLS등의 프로토콜로 터널링 시키기 위해서 사용되고 있음
지속 연결로 접속량을 절약
- http 초기버전에서는 http통신을 할 번 할 때마다 TCP에 의해 연결과종료를 할 필요가 있었습니다. → 초기 당시 통신에는 작은 사이즈의 텍스트를 보내는 정도 였기 때문에 이렇게 기능을 구현해도 아무문제는 없었음
- http가 널리 보급되어감에 따라 다량의 이미지를 포함한 문서등이 늘어났습니다. → 지속연결이라는 방법을 고안함.
지속연결의 장점
- tcp 커넥션의 연결과 종료를 반복되는 오버헤드를 줄여주기 때문에 서버에 대한 부하가 경감됨
- 부하를 줄인 만큼 http 리퀘스트와 리스폰스가 빠르게 완료되기때문에 웹페이지를 빨리 표시 할 수 있음
파이프 라인화
컴퓨터의 중앙 처리 장치에 여러 개의 파이프라인을 설치하여, 각 파이프라인이 하나의 명령어를 수행하도록 함으로써 동시에 여러 개의 명령어를 실행시키는 방법.
- 지속연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화를 가능하게 함.
- 리퀘스트 송신후에 리스폰스를 수신할때 까지 기다린 뒤에 리퀘스트를 발행하던것을 리스폰스를 기다리지 않고 바로 다음 리퀘스트를 보낼 수 있음.
쿠키를 사용한 상태관리
http에서 상태를 저장해놓지 않기 때문에 과거 상태를 근거로 해서 현재 리퀘스트를 처리한다는 것은 불가능함.
→ 인증이 필요한 웹페이지에서 상태 관리를 하지 않는다면 인증을 마친 상태를 잊어버린다.
→ 때문에 새로운 페이지로 이동할 때마다 재차 로그인 정보를 보내든지 리퀘스트마다 매개 변수나 추가 정보를 붙여서 로그인 상태를 관리해야 하는 상황이 발생함.
쿠키
- 쿠키는 서버에서 리스폰스로 보내진 Set-Cookie 라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 됨
- 같은 서버로 리퀘스트를 보낼 때, 자동으로 쿠키 값을 넣어서 송신함.
'CS > 네트워크' 카테고리의 다른 글
브라우저에 www.google.com을 입력하게 된다면?? (0) | 2023.06.02 |
---|---|
브라우저 렌더링부터 CSR,SSR,SPA,MPA 정리 까지 (0) | 2023.01.16 |
웹과 네트워크 계층 (0) | 2022.03.04 |