hyper text transfer protocol은 이름에서 알 수 있듯이 protocol 즉 어떠한 약속, 규칙입니다.
HTTP는 클라이언트-서버 프로토콜입니다. 이는 수신자 측에 의해 요청이 초기화 되는 프로토콜을 의미합니다.
HTTP는 사람이 읽을 수 있으며 간단하게 고안되었습니다.
HTTP에는 요청(req)과 응답(res)가 있는데 각각의 생김새는 아래와 같습니다.
- Start line : 요청의 종류(get,post 등등..), 요청을 보내는 리소스의 경로, HTTP의 버전을 나타냅니다.
- status line : 응답의 start line을 status line이라 하는데, 요청의 성공 여부와, 그 이유를 나타내는 상태코드를 나타냅니다.
- HTTP headers : 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해줍니다. HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론 ':' 다음에 오는 값(줄 바꿈 없이)으로 이루어져있습니다. 값 앞에 붙은 빈 문자열은 무시됩니다
- Empty line : 헤더(header)와 본문(body)을 구분하는 빈 줄 입니다.
요청의 종류에는 GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH가 있는데 이중 자주쓰이는 GET POST PUT PATCH DELETE에 대해 간략히 알아보면
- GET : 리소스의 조회에 사용됨 요청에 적은 경로로부터 리소스를 얻어온다
- POST : 서버에 요청 데이터를 전달한다. 주로 신규 리소스의 등록, 프로세스 처리 등에 사용된다. 성공적으로 등록시 201상태 코드와 생성된 URI 경로를 반환한다.
- PUT : 새로운 리소스를 생성하거나, 대상 리소스를 수정한다. POST와의 차이점은 멱등성으로 PUT은 멱등성을 가진다. PUT은 한 번보내는 것과 여러번 보내는 것과 같은 효과를 가집니다.
- PATCH : 리소스의 부분적인 수정을 할 때에 사용됩니다. PUT은 문서 전체의 수정만을 허용합니다. PATCH는 멱등성을 가지지 않는데 이는 동일한 PATCH요청이 다른 결과를 야기 할 수도 있음을 뜻합니다.
- DELETE : 지정한 리소스를 삭제합니다.
응답 상태 코드는 정말 많지만 크게 묶어 알아보면
- 100 : 클라이언트가 보낸 요청이 문제 없으니 다음 요청을 이어서 보내도 된다는 것을 의미합니다. 만약 클라이언트의 작업이 완료 됐다면 이 응답은 무시해도 됩니다.
- 200 : 요청을 성공했음을 나타냅니다. 200 응답은 보통 캐시 가능합니다. 캐시란 주어진 리소스의 복사본을 저장하고 있다가 요청 시에 제공하는 기술입니다. 웹 캐시가 자신의 저장소에 요청된 리소스를 가지고 있다면, 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환합니다. 일반적으로 GET요청에 대한 응답만 캐싱합니다.
- 300 : 리다이렉션 상태를 나타냅니다. 즉 요청에 가능한 응답이 두개 이상 있음을 의미합니다. 응답 중 하나를 선택하는 표준화된 방법이 없기 때문에 이 응답 코드는 거의 사용되지 않습니다.
- 400 : 요청에 오류가 있음을 감지해 요청을 처리할 수 없거나, 하지 않는다는 것을 의미합니다.
- 500 : 요청을 처리중 서버가 예상치 못한 상황에 놓임을 의미합니다. 서버 관리자들은 미래에 같은 에러가 발생하는 것을 방지하기 위해 500응답들에 추가적인 설명을 남겨둡니다.
HTTP에는 무상태성과 비 연결성이라는 특징을 가집니다.
stateless(무상태)란 서버가 클라이언트의 요청을 저장하지 않는다는 겁니다. 하지만 이는 장바구니 기능을 생각해보시면 문제가 있단걸 간단히 떠올리실 수 있을겁니다. 쿠키는 상태가 있는 세션을 만들도록 해줍니다.
connectionless(비 연결성)란 요청을 주고 받을때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊음을 의미합니다. 이를 통해 최소한의 자원으로 서버를 유지할 수 있도록 합니다. 하지만 이는 웹브라우저로 사이트를 요청시에 여러 리소르를(html,js,css,img 등등) 다운로드하기 위해 각 다운로드시마다 연결과 종료를 반복해야하는 문제를 야기한다. 그래서 현재는 연결이 이루어지고 난 뒤 각 자원들을 요청하고 모든 자원에 대한 응답이 들어온후에 연결을 종료한다.
ref
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP
HTTP 기본 - HTTP | MDN
HTTP는 상당히 확장 가능한 프로토콜입니다. 자원과 URI의 개념, 메시지의 단순한 구조, 통신 흐름을 위한 클라이언트-서버 구조와 같은 몇 가지 기본 개념에 의존합니다. 이러한 기본 개념을 토대
developer.mozilla.org