본문 바로가기

Computer Science/Network

[Network] HTTP (Hyper text transfer protocol)

반응형

1. HTTP

HTTP (Hyper text transfer protocol) 는 인터넷 상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 따르는 전송 프로토콜이다. TCP와 UDP를 사용하며 기본 포트는 80번을 사용한다.

※ Protocol
프로토콜은 컴퓨터가 네트워크 내에서 어떤 방식으로 통신해야하는지 정한 규칙의 집합이다. (ftp, telnet, http, smtp, dhcp 등등)

 


2. Connectionless & Stateless


- Connectionless
  • 서버에 연결하고 요청해서 응답을 받으면 연결을 끊어버린다.
  • HTTP 통신에서 클라리언트가 request를 서버에 보내고 서버가 클라이언트에게 response를 보내면 연결을 끊는다.
  • 동시사용자들의 접속유지를 최소한으로 할 수 있기 때문에 많은 사용자들의 요청을 처리할 수 있다.
  • 헤더에 keep-alive 값을 주어 연결을 재활용할 수 있다.

- Stateless
  • HTTP 통신이 종료되면 상태 정보를 유지하지 않는다.
  • Connectless 방식으로 인해서 클라이언트의 이전 상태 정보를 알 수 없다. (로그 정보 유지 불가능)
  • HTTP는 cookie와 Session을  사용해서 이 문제를 해결한다.


3. Cookie & Session

- Cookie
  • 클라이언트와 서버의 상태 정보를 담고있는 정보 조각이다.
  • 클라이언트 (브라우저) 로컬에 key-value 형식으로 저장된다.
  • cookie 값을 통해서 클라이언트의 상태 정보를 저장했다가 참조할 수 있다.
  • 사용자 인증 유효시간을 명시할 수 있는데, 이를 설정하면 브라우저가 종료되어도 해당 기간 동안에는 정보가 유지된다.
  • Response 헤더에 set-cookie 속성을 사용하여 클라이언트에 쿠키를 생성할 수 있다,

- Session
  • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 클라이언트 (브라우저) 가 아닌 서버 측에서 관리합니다.
  • 서버에서는 세션 ID를 두어 클라이언트를 구분하며, 웹 브라우저가 서버에 접속하여 브라우저가 종료될 때까지 인증상태를 유지한다.
  • 정보를 서버에 저장하기 때문에 보안적으로 쿠키보다 유리하지만 많은 사용자가 접속하는 경우 그만큼 서버의 메모리를 사용하게 되어 성능에 문제가 될 수 있다.

  • 클라이언트가 request를 보내면 서버에서 클라이언트에게 ID를 부여하는데 이것이 세션 ID이다.
  • 클라이언트는 서버로부터 전달받은 세션 ID를 쿠키로 저장하고 이후 request 시에 해당 세션 ID를 포함하여 서버에 요청한다.


4. URI & URL

- URI (Uniform Resource Identifier)

  • www (world wide web) 상에서 자원을 식별하는 통합 자원 식별자이다.
  • 해당 자원의 위치를 알려주는 프로토콜이다.

- URL (Uniform Resource Locator)
  • 흔히 웹 주소라고 부르는 것으로, 네트워크 상에서 자원의 위치를 나타내는 유일한 주소이다.
  • URI의 서브셋, 하위 개념이다.

- URI 구조
  • scheme: [//[user[:password]@]host[:port]][/path][?query][#fragment]
      ▸ scheme: 사용할 프로토콜 ex) http, https etc.
      ▸ user, password: 데이터에 접근하기 위한 사용자 계정의 이름과 비밀번호
      ▸ host, port: 접근할 대상, 서버의 호스트명과 포트 번호
      ▸ path: 접근할 자원의 경로에 대한 상세 정보
      ▸ query: 접근할 대상에 전달하는 추가 정보, 파라미터
      ▸ fragment: 메인 리소스 내부에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보


5.  Methods


- GET: 특정 리소스의 표시를 요청한다. GET을 사용하는 요청은 데이터를 수신만 한다.
- POST: 서버에 데이터를 보내기 위해 사용된다.
- PUT: 타겟 리소스를 제출하는 데이터로 완전 교체한다.
- DELETE: 타겟 리소스를 삭제한다.
- HEAD: GET과 유사한 응답을 요구하지만 바디를 포함하지 않고 헤더 정보만 요청한다. 해당 resource의 존재 여부, 서버의 문제를 확인하기 위해서 사용한다.
- CONNECT: URI로 인식된 서버로의 연결을 맺는다.
- OPTION: 타겟 리소스를 위한 communication option 설명을 얻는다.
- TRACE: 타겟 리소스의 경로를 따라 메시지 loop-back 테스트를 한다. 클라이언트의 요청을 그대로 반환하여 서버 상태 확인 등에 사용한다.
- PATCH: PUT과 유사하지만 전체를 교체하지 않고 일부를 변경한다.


6. Request & Response Form

- Request
  • header
      ▸ request method: GET, POST, PUT, PUSH ...
      ▸ request URI
      ▸ HTTP protocol version

  • body

- Response
  • header
      ▸ response protocol version: HTTP/1.1
      ▸ response code: 200 OK, 404 Not Found, 500 Internal Error ...
  •body
      ▸ response message

반응형