HTTP
HyperText Transfer Protocol
HTTP는 www(World Wide Web)상에서 정보를 주고 받는 프로토콜이다.
주로 HTML 문서를 주고받는 데에 쓰인다. TCP/UDP를 사용하고 80번 port를 사용한다.
1996년에 버전 1.0이 발표되고 1999년에 버전 1.1이 발표되었다. 추후 2015년도에 2.0이 발표되었다.
현재는 HTTP/1.1을 대부분 사용 중이지만 여러 주요 사이트는 HTTP/2와 HTTP/1.1을 동시에 지원하고 있다.
HTTP/2는 HTTPS 연결에서만 작동하며, HTTP 연결일 경우에는 브라우저와 서버에서 HTTP/2를 지원하더라도 HTTP/1.1로 연결된다.
특징
Connectionless(비연결성)
클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버리는 성질
- 장점 : 리소스 감소를 통한 더 많은 연결
불특정 다수의 통신 환경을 기반으로 설계되어 있기 때문에 다수의 클라이언트와 연결을 계속 유지해야 한다면, 이에 따른 많은 리소스가 발생한다.
따라서 연결을 유지하기 위한 리소스를 줄이면 더 많은 연결을 할 수 있으므로 비연결적인 특징을 갖는다.
- 단점 : 연결/해제에 따른 오버헤드 발생
서버는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 매번 새로운 연결을 시도/해제의 과정을 거쳐야하므로 연결/해제에 대한 오버헤드가 발생한다
Stateless
Connectionless로 인해 서버는 클라이언트를 식별할 수가 없는데, 이를 Stateless라고 한다.
State 관리 방법
- 쿠키
브라우저 단에서 쿠키를 저장하여 서버가 클라이언트를 식별할 수 있도록 한다.
단, 사용자 정보가 브라우저에 저장되기 때문에 공격자로부터 위변조의 가능성이 높아 보안에 취약
- 세션
세션은 브라우저가 아닌 서버단에서 사용자 정보를 저장하는 구조
그러나 세션 정보도 중간에 탈취 당할 수 있기 때문에 보안에 완벽하다고 할 수 없다.
또한 세션을 사용하면 서버에 사용자 정보를 저장하므로, 서버의 메모리를 차지하게 되고, 만약 동시 접속자 수가 많은 서비스일 경우에는 서버 과부화의 원인이 될 수 있다.
- 토큰(OAuth, JWT)
토큰 기반의 인증 방식의 핵심은 보호할 데이터를 토큰으로 치환하여 원본 데이터 대신 토큰을 사용하는 기술
중간에 공격자로부터 토큰이 탈취당하더라도 데이터에 대한 정보를 알 수 없으므로, 보안성을 높은 기술
서비스에 따라 기술의 특징을 잘 이해하여 때에 따라 쿠키, 세션, OAuth, JWT 등을 적절히 사용하는 것이 좋다.
HTTP 구성
HTTP 프로토콜 상에서 클라이언트와 서버는 데이터를 패킷 단위로 잘게 쪼개서 통신 한다.
- 시작라인 ( Request Line )
- 헤더 ( Header )
- 본문 ( Body )
헤더 자세한 내용
HTTP Method
- GET
서버에게 리소스를 달라는 요청 ( 조회 )
- HEAD
정확히 GET과 같지만, 서버는 응답으로 엔터티 본문 반환없이 헤더만을 반환.
클라이언트는 리소스를 가져올 필요 없이 헤더만을 통해 정보를 얻을 수 있다.
- PUT
서버가 요청의 본문을 갖고 요청 URI의 이름대로 새 문서를 만들거나, 이미 URI가 존재한다면 요청 본문을 변경할 때 사용한다. ( 수정 )
- POST
서버에 입력데이터를 전송하며 요청 엔티티 본문에 데이터를 넣어 서버에 전송. ( 삽입 )
- DELETE
서버에서 요청 URI 리소스를 삭제하도록 요청. ( 삭제 )
클라이언트는 항상 삭제된다고 생각하지만, 서버에서는 이 요청을 무시할 수도 있다.
- TRACE
클라이언트와 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지의 이상 유무를 파악.
서버는 응답 메시지의 본문에 자신이 받은 요청메시지를 넣어 응답하며, 주로 진단을 위해 사용.
- OPTIONS
서버에게 특정 리소스가 어떤 메소드를 지원하는지 물어볼 수 있습니다.
HTTP 응답 상태 코드
Reference
[HTTP] HTTP 특성(비연결성, 무상태)과 구성요소 그리고 Restful API
HTTP mdn