Skip to content
SeoSiun edited this page Jul 17, 2023 · 1 revision

HTTP

  • HTTP (HyperText Transfer Protocol)
  • 인터넷에서 웹서버(서버) 및 웹브라우저(클라이언트) 상호 간의 데이터 전송을 위한 Application Layer protocol
  • 초기에는 문서전달에 주로 이용되었지만, 현재는 이미지, 비디오, 음성 등 거의 모든 형식의 데이터 전송 가능

동작방식 : 요청 및 응답

  • 클라이언트 - 서버 모델로 동작

  • 클라이언트가 서버에 HTTP 요청(request) 메시지 전송

    → 서버는 요청을 처리해서 클라이언트에 HTTP 응답(reponse) 메시지를 보냄

특징

  • TCP/IP 위에서 동작
  • 연결 상태를 유지하지 않는 비연결성 프로토콜 (Connectless)
    • 일단 서버에 요청 후 응답을 받으면 연결을 끊음.
  • 따라서 많은 인원이 서비스를 사용하더라도 접속 유지를 최소화 하여 더 많은 사용자의 요청을 처리할 수 있다는 장점을 갖는다.
  • 하지만 매 요청에 대한 응답을 받을 때마다 연결을 끊기 때문에, 클라이언트의 이전 상태를 알 수 없다 (Stateless)
    • 이 경우, 클라이언트가 과거 로그인에 성공했더라도, 로그정보를 유지할 수 없다는 문제가 생길 수 있는데 Cookie, Session을 이용해 이러한 단점 해결 가능

Request

  • 클라이언트가 서버에 연락하는 것
  • 요청에 대한 정보를 담아 서버로 전송
  • 헤더(HEADER)와 바디(BODY)로 구성됨

Method

  • 요청의 종류를 서버에 알려주기 위해 사용
  • HTTP 요청 메서드의 종류는 아래와 같다.
    • GET: 자료를 요청할 때 사용 (Read)
    • POST: 자료의 생성을 요청할 때 사용 (Create)
    • PUT: 자료의 수정을 요청할 때 사용 (Update)
    • DELETE: 자료의 삭제를 요청할 때 사용 (Delete)

Request 메시지 구성

시작줄 (Request line): [메서드] [URI] [HTTP 버전]

  • 메서드: 요청하는 자원에 대한 행위
    • ex) GET, POST, …
  • URI: 요청하는 자원의 위치
    • ex) localhost:8080/index.html에서 index.html 부분!

Header

  • 요청에 대한 메타데이터가 들어있음.

  • [이름]: [값] 형태의 여러 개의 header line으로 구성

    ex) Host: localhost:8080

빈줄 (blank line)

  • 헤더의 끝을 의미

Body

  • 메소드가 GET일 때 등 데이터를 전달할 필요가 없을 때는 빈 채로 전송

ex) POST 요청

  • 아래는 was 프로젝트에 POST 요청을 보내고, InputStream으로 request를 출력한 내용이다.

    POST / HTTP/1.1                             **→ request line**
    Content-Type: application/json              **→ header lines**
    User-Agent: PostmanRuntime/7.32.3
    Accept: */*
    Postman-Token: cbe20735-a35b-44b5-920d-0cef0c894b21
    Host: localhost:8080
    Accept-Encoding: gzip, deflate, br
    Connection: keep-alive
    Content-Length: 22
                                                **→ blank line**
    {                                           **→ body**
        "test": "test"
    }

Response

  • 서버가 요청에 대한 답변을 클라이언트에 보내는 것

Status Code (상태코드)

  • 1xx (조건부 응답): 요청을 받았으며 작업을 계속 함..? (처리중)
  • 2xx (성공): 서버가 요청을 성공적으로 처리함
  • 3xx (리다이렉션): 클라이언트 요청을 완료하기 위해 다른 페이지로 보내야함.
  • 4xx (클라이언트 오류): 클라이언트 요청에 오류가 있음
  • 5xx (서버 오류): 유효한 요청이지만 서버가 제대로 수행하지 못함.

Response 메시지 구성

시작줄 (Response line / Status line): [HTTP 버전] [상태코드] [상태메시지]

  • Status Code (상태코드) : 요청 성공 여부에 대한 코드

Header

  • 응답에 대한 정보를 담고 있음
  • [이름]: [값] 형태의 여러 개의 header line으로 구성

빈줄 (blank line)

  • 헤더의 끝을 의미

Body

  • response는 대부분의 경우 Body가 존재
  • 요청받은 데이터 등이 담겨 있음