Web-HTTP
HTTP
정의
HTTP(Hyper Text Transfer Protocol)는 웹 서버(Apache, Nginx 등)와 클라이언트(브라우저)가 인터넷 상에서 HTML문서와 같은 리소스들을 주고받을 수 있도록 하기 위해 만든 프로토콜(통신 규약)
HTTP통신은 클라이언트가 데이터를 요청(request)하면 그 요청을 처리하여 서버가 다시 클라이언트에게 응답(response)하는 큰 흐름을 따른다
어떠한 데이터의 형태도 주고 받을 수 있다
특징
- 무상태(stateless) & 비연결성(Connectionless)
- 한 번의 요청에 대해 TCP통신을 설정한 후 한 번의 요청에 대한 응답이 처리되면 TCP연결을 끊어 버리는 형태의 통신
- TCP연결을 끊어 버리는 형태의 통신으로 연속적인 통신에 부적합
- 하지만, 인터넷과 같이 다수의 사용자를 대상으로 한 Pull방식의 사용자가 필요한 문서 서비스를 전달 받는 구조에는 적합한 통신 구조
- 한 번의 요청에 대해 한 번의 응답으로 트랜잭션이 종료되므로 연속적인 작업 처리에 필요한 트랜잭션 상태 정보를 관리하기 위한 Overhead가 없다
- HTTP를 상업적으로 이용하면서 이러한 구조는 큰 단점이 되었다
- 대안 기술: Cookies & Session Tracking
HTTP Request Message의 구조
3가지 부분으로 구성
start line(request line)
- HTTP Method: GET, POST 등 action을 정의
- Request target: request가 전송되는 uri(end point)
- HTTP Version
headers
- 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해주며, key:value 값으로 되어있다
- Host: (가상 호스팅을 위해) 서버의 도메인명과 서버가 리스닝하는 (부가적인) TCP 포트를 특정한다
- User-Agent: 요청을 보내는 클라이언트에 대한 정보
- Accept
- MIME 타입으로 표현
- 클라이언트가 이해 가능한 컨텐츠 타입이 무엇인지 알려준다
- 서버는 제안 중 하나를 선택하고 사용하며 Content-Type 응답 헤더로 클라이언트에게 선택된 타입을 알려준다
- Cache-Control(HTTP/1.1)
- Cache를 이용하여 웹 서버와 클라이언트간의 요청과 응답 횟수를 줄여 대역폭을 향상하기 위해 사용된다
- 만기일(expiration)과 유효일(validation)을 지정
- Connection
- 트랜젝션 종료후에 네트워크 연결을 유지할지 말지를 결정한다
- HTTP/1.0은 트랜젝션 이후의 커넥션을 종료한다
- colse : 연결을 끊음
- keep alive : 연결을 지속
- Content-Type
- 해당 요청이 보내는 메세지 body의 타입
- 예를 들어 JSON을 보내면 application/json
- Content-Length: 메세지 body의 길이
blank line: 요청에 대한 meta 정보가 전송되었음을 알린다
body:
- 해당 request의 실제 메세지/내용이 들어있다
- XML, HTML, JSON 데이터가 들어갈 수 있다
HTTP Response 구조
status line
response의 상태를 간략하게 나타내며, 3부분으로 구성되어 있다
- HTTP Version
- status code: 응답 상태를 나타내는 코드
- status text: 으답 상태를 설명(ex: Not Found)
headers
- request의 header와 동일하다
- response에서만 사용되는 header값이 있다. (예: User-Agent가 없고, Server가 있음)
blank line
body: 실제 응답하는 데이터를 나타낸다