sharingStorage

HTTP 프로토콜에 대해 본문

개념

HTTP 프로토콜에 대해

Anstrengung 2022. 1. 14. 10:44

HTTP

HTTP는인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. 이때 HTTP요청에 포함되는 HTTP메소드는 서버가 요청을 수행하기 위해 해야할 행동을 표시하는 용도로 사용합니다. 애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동하며, 80포트를 사용합니다. 클라이언트가 서버에게 웹페이지를 보여달라는 것을 Request(요청)이라고 부르며 서버가 클라이언트에게 요청받은 것에 대한 대답으로 웹페이지를 표현하기 위해 html문서로 주는 것을 Response(응답)이라 부른다.

 - 프로토콜이란?

프로토콜은 통신규약으로 인터넷에서 데이터를 주고받을 수 있는 통신규약입니다.

 

 - 서버 클라이언트 모델이란? 

서비스제공자와 서비스 요청자로 구분되는 네트워크 모델이다. 서비스 제공자의 역할을 하는 측을 서버, 서비스 요청자의 역할을 하는 측을 클라이언트라고 하며

클라이언트는 데이터 프리젠테이션을 위한 최소한의 자원을 가지는게 일반적이다.

 

 - TCP/IP 프로토콜이란?

인토넷 프로토콜 중 가장 중요한 역할을 하는 TCP와 IP의 합성어이며 인터넷 동작의 중심이 되는 통신규약으로 데이터의 흐름 관리, 데이터의 정확성 확인(TCP역할), 패킷을 목적지까지 전송하는 역할(IP)을 담당한다. 

 

 

URI vs URL 

URI는 Uniform Resource Idenrifiers(통합 자원 식별자)의 줄임말로 자원의 위치를 찾는역할을 한다. URI는 하나의 리소스를 가리키는 문자열이며 가장흔한 URI는 URL이며 이것은 웹 상에서의 위치로 리소스를 식별한다. 즉 URI와 URL은 엄연히 다른 점이 있다는 것이다. 

URL(Uniform Resource Locator)은 인터넷에서 웹페이지, 이미지, 비디오등 위치를 가리키는 문자열이다. 

정리하자면 URI가 URL보다 더 큰 범주에 들어가있는 것 같다. 

즉 모든 URL은 URI이지만 몇몇 URI만이 URL이다.

HTTP는 전송 프로토콜이고 URI는 자원의 위치를 알려주기 위한 프로토콜이다. 

 ex) http://www.example.com/practice

위 예를 분석해보자면

http://  : 자원에 접근하기 위해서 http프로토콜을 사용한다는 것이다.

www.example.com  : 도메인 주소이다. 자원의 인터넷상에서 위치이며  도메인은 ip주소로 변환되므로 ip주소로 서버의 위치를 찾을 수 있다.

practice : 요청할 자원의 이름이다. 이때 Query string이 포함되기도 한다.

이렇게  프로토콜/위치/자원명으로 인터넷 상에 어디 있던지 자원에 접근할 수 있다.

 

Query string 

사용자가 URL의 한 부분으로 특정한 파라미터에 값을 할당한다.

query parameters를 url뒷부분에 덧붙여서 추가적인 정보를 서버측에 전달하는 것이다. 클라이언트가 어떤 특정 리소스에 접근하고 싶어하는지 정보를 담는다.

ex1

ex2)
엔드포인트 주소?파리미터=값&파라미터=값 
http://www.example.com/practice?keystring=abcd

 

HTTP 패킷

클라이언트가 서버로 요청할 때 보내는 데이터를 HTTP패킷이라고 한다.

HTTP 프로토콜을 이용하면서 인터넷을 통해 데이터를 보낸다.

HTTP 패킷의 구조는 크게 헤더와 바디로 나누어진다.

 

  • 헤더(header)에는 HTTP메서드 방식 중 무엇을 썼는지(GET,POST,...) 클라이언트의 정보, 브라우저의 정보, 접속할 URL등과 같은 클라이언트 정보를 담는다.
  • 바디(body)는 보통 비어있다가 특정 데이터를 담아서 서버에게 요청을 보낸다.

 

HTTP Method

이부분은 따로 한번 더 다루어야할 것 같아 간단히 정리해두려고 한다.

  • GET (조회): URL에 표시된 리소스 가져오기 / 자원을 요청
  • POST (생성): Body에 정보를 담아 서버에 입력 / 자원의 생성을 요청
  • PUT (수정): URL에 표시된 리소스와 바꿔치기 / 자원의 대체를 요청
  • PATCH (수정): PUT과 다르게 일부만 수정 / 
  • DELETE (삭제): URL에 표시된 특정 리소스를 삭제 / 자원의 삭제를 요청

 

HTTP 응답코드

응답대역 응답코드 설명
정보전송 100 Continue : 클라이언트로부터 일부 요청을 받았으며 나머지 정보를 계속 요청함
임시응답 101 Switch protocols
성공 200 OK : 요청이 성공적으로 수행
201 Created:PUT메소드에 의해 원격지 서버에 파일 생성됨
202 Accepted :웹서버가 명령 수신
203 Non-authoritative information :서버가 클라이언트 요구 중 일부만 전송
204 No content, (PUT, POST, DELETE의 요청은 성공했지만 전송할 데이터가 없는 경우)
리다이렉션 301 Moved permanently : 요구한 데이터를 변경된 타 URL에 요청함 / Redirect된 경우
302 Not temporarily
304 Not modified : 컴퓨터 로컬의 캐시 정보를 이용함, 대개 gif 등은 웹서버에 요청하지 않음
클라이언트 요청에러 400 Bad Request : 사용자의 잘못된 요청을 처리할 수 없음
401 Unauthorized : 인증이 필요한 페이지를 요청한 경우
402 Payment required : 예약됨
403 Forbidden : 접근 금지, 디렉터리 리스팅 요청 및 관리자 페이지 접근등을 차단
404 Not found : 요청한 페이지 없음
405 Method not allowed : 허용돠지 않은 http메소드 사용함
407 Proxy authentication required : 프록시 인증 요구됨
408 Request timeout : 요청시간 초과
410 Gone : 영구적으로 사용 금지
412 Preocondition failed : 전체 조건 실패
414 Request-URI too long : 요청 URL길이가 긴 경우
서버에러 500 Internal server error : 내부 서버 오류
501 Not implemented : 웹서버가 처리할 수 없음
503 Service unnailable : 서비스 제공 불가
504 Gateway timeout : 게이트웨이 시간 초과
505 HTTP version not supported : 해당 http 버전 지원되지 않음

 

HTTPS

SSL은 전자상거래에서의 데이터 보안을 위해서 개발한 통신 레이어다. SSL은 표현계층의 프로토콜로 응용 계층 아래에 있기 때문에, 어떤 응용 계층의 데이터라도 암호화해서 보낼 수 있다.

HTTP는 기본적으로 평문 데이터 전송을 원칙으로 하기 때문에 개인의 프라이버시가 오가는 서비스들 (전자상거래, 전자메일, 사내문서)에 사용하기 힘들다. HTTPS는 SSL 레이어위에 HTTP를 통과 시키는 방식이다. 즉 평문의 HTTP 문서는 SSL 레이어를 통과하면서 암호화 돼서 목적지에 도착하고, 목적지에서는 SSL 레이어를 통과하면서 복호화 돼서 웹 브라우저에 전달된다.

 

HTTP vs HTTPS

  • HTTPS URL은 "https://" 로 시작한다. 기본 포트번호는 443이다. HTTP URL은 "http://" 로 시작한다. 기본 포트번호는 80이다.
  • HTTP는 평문 데이터를 기반으로 하기 때문에, 유저정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. HTTPS는 이러한 공격을 견딜 수 있도록 설계돼 있다.
  • HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
  • 일반적으로 HTTPS는 HTTP에 비해서 (매우 많이)느리다. 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다. 많은 웹 사이트들이 민감한 정보를 다루는 페이지 (로그인 혹은 유저정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.

 

 

추가로

HTTP 메소드는 자세하게 한번 더 다루어야할 것 같다. 

그때 GET과 POST의 차이, 멱등성 추가적으러 같이 다루어 보려고 한다.

 

 

Reference

'개념' 카테고리의 다른 글

localStorage와 sessionStorage  (0) 2022.06.27
Pure function vs Impure function  (0) 2022.01.10
Synchronous(동기) vs Asynchronous(비동기)  (0) 2022.01.03
Comments