HTTP(HyperText Transfer Protocl)
인터넷 상에서 데이터(하이퍼텍스트)를 빠르게 교환하기 위한 프로토콜의 일종으로
서버와 클라이언트의 사이에서 어떻게 메시지를 교환할지를 정해놓은 규칙으로
80번 포트를 사용한다.
HTTP의 구조는 요청(Request) 응답(Response)로 구성되어 있다.
인터넷 주소 맨 앞에 들어가는 http://가 바로 이 프로토콜을 사용해서 정보를 교환하겠다는 표시
요청들은 서버로 보내지며, 서버는 요청을 처리하고response라고 불리는 응답을 제공해준다.
요청 과 응답 사이에는 여러 개체들이 있는데
예를들면 다양한 작업을 수행하는 게이트웨이 또는 캐시 역할을 하는 프록시 등이 있다.
TCP
HTTP는 전송 프로토콜을 요구하지 않는다.
하지만 신뢰할 수 있거나 메시지 손실이 없는(최소한의 오류는 표시) 연결을 요구한다.
인터넷 상의 가장 일반적인 두 개의 전송 프로토콜중에서 TCP는 신뢰할 수 있으며 UDP는 그렇지 않다.
그러므로 연결이 필수는 아니지만 연결 기반인 TCP 표준에 의존한다.
HTTP의 특징
간단하다.
HTTP는 사람이 읽을수 있으며 간단하게 고안 되었다.
HTTP/2가 다소 더 복잡해졌지만 HTTP메시지를 프레임별로 캡슐화하여 간결함을 유지하였다.
확장 가능
HTTP헤더를 통해 클라이언트와 서버가 새로운 기능을 추가할 수 있다.
(HTTP 헤더는 클라이언트와 서버가 요청또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.)
HTTP는 상태를 유지하지 않는다.(Stateless)
Connectionless로 인해 서버는 클라이언트를 식별할 수가 없는데 이를 Stateless라고 한다.
HTTP는 상태를 저장하지 않는다(Stateless) 동일한 연결상에서 연속하여 전달된 두개의 요청 사이에는 연결고리가 없다. → 일관된 방식으로 사용자가 페이지와 상호작용하길 원할 때 문제가 된다.
HTTP의 핵심은 상태가 없는것이지만 HTTP 쿠키는 상태가 있는 세션을 만들도록 해준다.
헤더 확상성을 사용하여 동일한 컨텍스트 또는 동일한 상태를 공유하기 위해 각각의 요청들에 세션을 만들도록 HTTP쿠키가 추가된다.
상태를 기억하는 방법에는 쿠키,세션,JWT,OAuth등이 있다.
비연결성
Connectionless
HTTP는 클라이언트가 서버로 request를 한후 서버가 요청에 response하면 접속을 끊는 특징
HTTP는 인터넷 상에서 불특정 다수의 통신환경을 기반으로 설계되었다.
때문에 서버에서 다수의 클라이언트와 연결을 계속 유지해야 한다면, 이에따른 많은 리소스가 발생하게 된다.
따라서 연결을 유지하기 위한 리소스를 줄미녀 더 많은 연결(가용성)을 할 수 있으므로 비연결적인 특징은 갖는다.
HTTP로 제어할 수 있는것.
- 캐시
- HTTP로 문서가 캐시되는 방식을 제어할 수 있습니다. 서버는 캐시 대상과 기간을 프록시와 클라이언트에 지시할 수 있고 클라이언트는 저장된 문서를 무시하라고 중간 캐시 프록시에게 지시할 수 있습니다.
- origin 제약사항을 완화하기
- 스누핑과 다른 프라이버시 침해를 막기 위해, 브라우저는 웹 사이트 간의 엄격한 분리를 강제합니다. 동일한 origin으로부터 온 페이지만이 웹 페이지의 전체 정보에 접근할 수 있죠. 그런 제약 사항은 서버에 부담이 되지만, HTTP 헤더를 통해 그것을 완화시킬 수 있습니다. 그런 덕분에 문서는 다른 도메인으로부터 전달된 정보를 패치워크할 수 있습니다(그렇게 하려면 어떤 경우에 보안과 관련된 사항이 있을 수도 있습니다).
- 인증
- 어떤 페이지들은 보호되어 오로지 특정 사용자만이 그것에 접근할 수도 있습니다. 기본 인증은 HTTP를 통해 WWW-Authenticate (en-US) 또는 유사한 헤더를 사용해 제공되거나, HTTP 쿠키를 사용해 특정 세션을 설정하여 이루어질 수도 있습니다.
- 프록시와 터널링 (en-US)
- 서버 혹은 클라이언트 혹은 그 둘 모두는 종종 인트라넷에 위치하며 다른 개체들에게 그들의 실제 주소를 숨기기도 합니다. HTTP 요청은 네트워크 장벽을 가로지르기 위해 프록시를 통해 나가게 되죠. 모든 프록시가 HTTP 프록시는 아닙니다. 예를 들면 SOCKS 프로토콜은 좀 더 저수준에서 동작합니다. FTP와 같은 다른 프로토콜도 이 프록시를 통해 처리될 수 있습니다.
- 세션
- 쿠키 사용은 서버 상태를 요청과 연결하도록 해줍니다. 이것은 HTTP가 기본적으로 상태없는 프로토콜임에도 세션을 만들어주는 계기가 됩니다. 이것은 e-커머스 쇼핑 바구니를 위해서 유용할 뿐만 아니라 사용자 구성을 허용하는 모든 사이트에 대해서 유용합니다.
HTTP 흐름
- TCP연결을 연다클라이언트는 새 연결을 열거나 기존 열결을 재사용하거나, 서버에대한 여러 TCP연결을 열 수 있다.
- TCP연결은 요청을 보내거나 응답을 받는데 사용된다.
- HTTP메시지를 전송
- 서버에 의해 전송된 응답을 읽어드린다.
- 연결을 닫거나 다른 요청들을 위해 재사용한다.
HTTP 요청
- HTTP 메소드
- 보통 클라이언트가 수행하고하는 동작을 정의한다
- Path
- 가져오려는 리소스의 경로
- Version of the protocol
- HTTP 프로토콜의 버전
- Headers
- 서버에 대한 추가 정보를 전달하는 선택적 헤더
- body
HTTP 응답
- HTTP 프로토콜의 버전.
- 요청의 성공 여부와, 그 이유를 나타내는 상태 코드.
- 아무런 영향력이 없는, 상태 코드의 짧은 설명을 나타내는 상태 메시지.
- 요청 헤더와 비슷한, HTTP 헤더들.
- body
HTTP 응답상태 코드
클라리언트가 서버에 요청을 하면, 서버는 요청에대한 처리 상태를 숫자로 반환하는데 이를 응답코드라 한다.
- 100번대 : 메시지 정보
- 200번대 : 요청 성공
- 300번대 : 리다이렉션 완료
- 400번대 : 클라이언트 에러
- 500번대 : 서버에러
자세한 응답 코드 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
'웹' 카테고리의 다른 글
인증 쿠키와 세션 JWT (0) | 2021.07.25 |
---|---|
로드 밸런서란? (0) | 2021.07.23 |
SSH란? (0) | 2021.07.22 |
프레임워크 vs 라이브러리 (0) | 2020.06.02 |
JDBC란 (0) | 2020.05.17 |
댓글