[CS] - Network(2)
HTTP (HyperText Transfer Protocol)
- 웹 상에서 웹 서버와 웹 브라우저(클라이언트) 상호간 데이터 전송을 위한 응용계층 프로토콜이다.
- tcp 기반이다.
- 연결 상태를 유지하지 않는(stateless) 비연결성 프로토콜으로, 이를 해결하기 위해 쿠키와 세션이 등장하였다.
-
80번 포트 사용
- 가독성 : 사람이 읽고 이해할 수 있다.
- 확장성 : 하이퍼텍스트 문서 뿐만 아니라 이미지, 비디오, HTML form result와 같은 내용은
POST
하기 위해서도 사용할 수 있다. - Stateless : 상태를 저장하지 않고, 동일한 상태 및 컨텍스트를 유지하기 위해 세션 혹은 쿠키를 사용한다.
동작
- 사용자(클라이언트)가 브라우저를 통해서 요청
- 서버에서 요청 결과 찰아서 사용자에게 응답
- 클라이언트와 서버 간 http 메세지를 주고받으며 통신한다.
- 요청 메시지
- 응답 메시지
- 헤더
HTTP status code(상태 코드)
- HTTP 요청 후 서버에서 반환되는 상태 코드
- 요청 처리 상태를 클라이언트로 전달
-
3자리 숫자로 구성되며, 첫 번째 자리는 상태 코드의 분류를 의미한다.
- 1xx (Informational, 조건부 응답) : 요청을 받았으며, 처리 중임을 나타낸다.
- 2xx (Successful, 성공) : 요청이 성공적으로 처리되었음을 나타낸다.
- 3xx (Redirection, 리다이렉션 완료) : 요청을 완료하려면 추가 작업이 필요함을 나타낸다.
- 4xx (Client Error) : 클라이언트 오류로 요청이 실패함을 나타낸다.
- 5xx (Server Error, 서버 오류) : 서버 오류로 요청을 처리할 수 없음을 나타낸다
HTTP Request method
목적에 따라 종류가 다양하며, 요청은 다음과 같은 요소로 구성된다.
- 메소드
GET
: 서버로부터 정보를 조회하기 위한 메소드POST
: 서버에 정보를 제출하기 위한 메소드 (최초 제출)PUT
: 서버에 정보를 업데이트하기 위한 메소드 (수정할때 사용)PATCH
: 서버 정보를 일부 수정하기 위한 메소드 - 리소스의 부분만을 수정 -DELETE
: 서버에 정보를 삭제하기 위한 메소드
- 리소스 경로
- HTTP 프로토콜 버전
- headers
- body :
POST
와 같은 메소드를 사용하는 경우…
HTTP 1.1 VS HTTP 2.0
HTTP/1.1 | HTTP/2 | |
---|---|---|
프로토콜 형태 | 텍스트 형태 프로토콜 | 이진 형태 프로토콜 |
메시지 캡슐화 | 프로토콜 데이터 단위(PDU)에 HTTP 헤더와 바디 포함 | 이진 프레이밍 레이어(binary framing layer)를 사용하여 이진 형태로 캡슐화 |
멀티플렉싱 | 지원하지 않음 | 여러 요청과 응답을 동시에 처리할 수 있는 멀티플렉싱(다중 전송) |
헤더 압축 | 지원하지 않음 | HPACK 알고리즘을 이용한 헤더 압축 |
서버 푸시 | 지원하지 않음 | 서버가 클라이언트의 요청 없이 데이터를 전송할 수 있는 서버 푸시 기능 제공 |
- HTTP/1.1은 모든 요청과 응답을 평문으로 전송하고 다중 연결을 지원하지 않아 새로운 TCP 연결마다 별도의 플로우 제어 메커니즘이 필요하다.
HTTPS
- HTTPS(Hypertext Transfer Protocol Secure)는 HTTP 프로토콜에 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security) 프로토콜을 추가한 것이다.
- 데이터 암호화를 통해 보안성을 강화하였다.(공개키 암호화)
- 인터넷 뱅킹, 온라인 쇼핑몰, 소셜 미디어 등 개인정보가 중요한 웹사이트에서 사용한다.
- 구글, 페이스북, 트위터 등 대형 인터넷 서비스에서 사용한다.
- 443 포트를 사용한다.
- 최근 웹 브라우저에서는 HTTP에서 HTTPS로 전환을 강제하거나, HTTPS 사이트를 더욱 강조하는 등 HTTPS 사용을 유도하고 있다.
작동 과정
- 클라이언트가 HTTPS로 액세스하려는 서버에 접속한다.
- 서버는 공개키와 서버 인증서를 클라이언트에게 제공한다.
- 클라이언트는 서버 인증서의 유효성을 확인한다.
- 클라이언트는 공개키를 사용하여 세션 키를 암호화하여 서버로 전송한다.
- 서버는 자신의 비밀키를 사용하여 세션 키를 복호화한다.
- 이후 클라이언트와 서버 간에 전송되는 모든 데이터는 세션 키를 사용하여 암호화한다.
장점
- 데이터의 기밀성 보호: HTTPS를 사용하면 전송되는 데이터가 암호화되므로 제3자가 데이터를 조회하는 것을 방지할 수 있다.
- 무결성 보호: HTTPS는 데이터가 수정되지 않았음을 보장하므로, 데이터가 악의적으로 변경되는 것을 방지할 수 있다.
- 신뢰성 보장: HTTPS는 서버 인증서를 사용하여 서버의 신원을 확인하므로, 중간자 공격을 방지할 수 있다.
단점
- 암호화 및 복호화의 추가 작업으로 일부 성능 저하가 일어날 수 있다.
- 사용을 위해 인증서를 발급받아야 하며, 이에 따른 추가 비용이 발생할 수 있다.
SSL handshake
출처
- https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/
- https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
- https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
Leave a comment