HTTP 기초

Heidi·2022년 5월 1일
0

WEB

목록 보기
3/3
post-thumbnail

웹의 핵심 기술 HTTP 프로토콜


HTTP의 개념

HTTP는 하이퍼텍스트 문서를 전송하기 위해 사용되는 프로토콜
즉 통신규약으로 여기서 하이퍼텍스트는 HTML파일을 말한다.
웹의 핵심기술로 꼭 알아두자.

버전

상세하게 알 필요까지는 없으나 차이점에 대해 알아두자

HTTP/0.9

최초로 웹이 만들어졌을 때 오직 HTML을 받아 오기위해 만들어졌다. 정식사양이 아니었다.
GET 메소드만 지원하며 특별한 기능은 없다.

HTTP/1.0

POST, HEAD 메소드, 헤더를 지원하며 요청 결과를 알 수 있는 상태코드가 추가 되었다.
HTML외 이미지 등도 전송이 가능했으나,
각 요청마다 새로운 연결을 맺고 끊고 다시 새로운 연결을 맺는 비효율적인 비연결지향 방식으로 성능이 떨어진다.

HTTP/1.0+

"Keeo-Alive커넥션"을 지원함으로 여러 번 커넥션을 맺는 설계상의 문제를 해결하였다.

HTTP/1.1

"Keeo-Alive커넥션"을 통해 지속연결을 지원하였으나 명세에서 빠지고 기본 지속연결이 활성화 되었다.
요청이 끝나면 "Connection:close"헤더를 통해 연결종료를 알린다.
메소드가 OPTIONS, PUT, DELETE 등 많이 추가되었다.

HTTP/2.0

성능향상에 초점을 둔 프로토콜로 멀리플렉싱 스트림, 헤더 압축, 서버푸시 등의 기능이 추가되었다.
별도로 자세히 공부하는 것이 필요하다.

HTTP/3.0

UDT 형식이라고 하는데 별도의 공부가 필요하다.


OSI7 Layer에서 바라 본 HTTP프로토콜

OSI계층 모델 공부를 위해 설계된 것이다.
(TCP/IP가 더욱 현실적이다)
웹에서 사용되는 HTTP, HTTPS 프로토콜은 응용 계층에 해당된다.
어떠한 프로토콜을 기반으로 통신하는지 알아두는 것이 좋다.

TCP/IP 통신에 대해

대부분의 네트워크 통신은 TCP/IP 기반의 통신을 한다.
통신을 위한 중요정보로 IP(Internet Protocol)와 port가 있다.

IP를 통해 물리적 호스트 대상을 찾으며, 우리가 실생활에 쓰는 주소와 비슷하다.
Port를 통해 논리적 대상을 찾는다. 이는 상세주소와 비슷하다.


통신 흐름

1) 웹 브라우저에서 url입력
2) 웹 브라우저에서 통신을 위한 임의의 포트 할당
3-1) 목적지 IP, PORT 세팅 (기본 80PORT)
3-2) 출발지 IP, POST 또한 명확해야 통신이 가능해짐
4) 서버에서 요청을 받아 어플리케이션 작동
5) 서버의 응답을 사용자에게 전달


연결 관리 방식

HTTP 프로토콜은 버전에 따라 연결 관리 방식이 다르다.

비지속 연결

초창기 웹에서 사용하던 방식 HTTP/1.0까지임
단순한 문서 전달 위주였기 때문에 지속적인 연결이 필요하지 않았다.
지금은 비효율적이기 때문에 사용하지 않는다.


지속 연결

HTTP/1.0+부터 Keep-Alive 연결을 지원한다. 일부 버전은 헤더에서 확인할 수 있다.
현재는 기본으로 지속 연결로 값이 지정되어 있다.
현재 웹 문서의 경우 인터페이스 구성을 위해 많은 리소스가 필요하고,
리소스 요청마다 응답이 바로 이뤄져야 하기 때문에 지속적 연결이 필요하게 되었다.


HTTP Message 구조


메세지의 종류는 두 가지이나 구조는 같다

  1. 요청 메세지 (Requset Message)
  2. 응답 메세지 (Response Message)

속성 : 값; 형식으로 구성되어 있다.
Method가 POST일 경우 message Body에 담겨 전송된다.


HTTP Message 개행문자

OS마다 개행문자의 기준이 조금씩 다르다. HTTP의 경우 ASCII의 CE + LF를 사용한다.

\r

: 탈출 문자(Carriage Return) = CE
Hex 값 = "OxOD"

\n

: 새로운 줄(Line Feed) = (LF)
Hex 값 = "Ox)A"


HTTP Request Message

  • 상태라인 : 시작줄 부분으로, 버전 / 상태코드 / 요청 문구가 있음
    구분 기준은 공백임

  • 헤더 : 시작줄 아랫 부분으로, 요청속성 및 추가정보가 있음

  • 바디 : 메소드에 따라 존재 유무가 나뉘는 선택적 부분임


HTTP Response Message

  • 상태라인 : 시작줄 부분으로, 버전 / 상태코드 / 응답 문구가 있음
    구분 기준은 공백임

  • 헤더 : 시작줄 아랫 부분으로, 응답속성 및 추가정보가 있음

  • 바디 : 메소드에 따라 존재 유무가 나뉘는 선택적 부분임


HTTP 메소드 GET과 POST의 차이

일반적으로 웹 통신시 가장 많이 사용되는 메소드들이다.
클라이언트에서 서버에 데이터를 전달할 때 사용되는 방식이다.

  • GET (url로 데이터 전달)
    일반적으로 어떤 값을 받기 위해 사용

  • POST(body로 데이터 전달)
    일반적으로 어떤 값을 전송하기 위해 사용
    ( action = 생성 / 삭제 / 수정 등 )

메소드만 바꾸면 변경되나?

안된다!
POST 메소드는 body를 통해 값을 전달하므로 body를 읽을 수 있게 해주는 Content-Type을 주기 때문이다.


HTTP 상태코드

서버는 클라이언트의 요청에 따른 상세 결과를 상태코드로 회신한다.
더 많은 상태 코드들이 있지만 아래는 대표적으로 사용되는 상태코드들이다.

코드에 문제가 있을 때에도 500이 회신되기도 한다.

profile
햇님쓰 개발일기장

0개의 댓글