[컴퓨터 네트워크] HTTP 요청과 응답

    HTTP 요청과 응답 과정

    1. TCP socket 생성 (TCP를 사용하는 HTTP의 경우)
    2. GET 메시지 전송 (클라인언트 -> 서버)
    3. HTTP 응답 메시지 전송 (서버 -> 클라이언트)
    4. 요청 객체 전송 (서버 -> 클라이언트)
      클라이언트가 요청한 객체(컨텐츠 또는 리소스)는 서버가 전송한 응답 메시지(3번 과정)의 body 부분에 포함되어 있음

    HTTP 요청 메시지

    서버 푸시(HTTP/2~), 웹 소켓(양방향 통신, 채팅), 푸시 알림(백그라운드 작업 또는 서비스 업데이트 알림) 등의 경우를 제외하면,

    클라이언트가 서버에게 요청을 보내는 것이 일반적이다.

     

    HTTP 패킷 캡처 (GET 요청)

    • 요청 내용: GET / HTTP/1.1 -> 이게 핵심!
    • 나머지 부분은 헤더
    • 요청 내용과 헤더 필드는 반드시 <CR><LF>로 끝나야 함 (빈 줄)
      여기서 '<CR><LF>'는 '\r\n'과 같음
      CR: Carriage Return, LF: Line Feed
    • 보통 POST, PUT, PATCH 등 리소스를 업데이트 하는 경우 요청 메시지에 body 부분이 포함됨
      GET은 데이터를 서버에 전송하지 않고 리소스를 요청하므로 URL 파라미터에 요청 데이터를 담아 보냄 -> body 불필요

    HTTP 응답 메세지

    서버는 클라이언트로부터 요청받은 것에 대한 응답 메시지를 전송한다.

     

    HTTP 패킷 캡처 (서버 응답)

    • 상태표시 행 (status line) - status code와 reason message를 포함
      ex. HTTP/1.1 302 Found -> status code: '302', reason message: 'Found'
            HTTP/1.1 200 OK -> status code: '200', reason message: 'OK'

      * 302 -> 리소스가 일시적으로 새로운 위치로 이동되었음을 나타냄 (위의 사진에서 클라이언트가 요청한 URL은 "http://www.tistory.com"이지만 올바른 주소인 "https://www.tistory.com"으로 리다이렉션 됨), Location으로 리다이렉션 된 URL을 알려줌
      * 200 -> 요청이 성공적으로 처리되었음을 나타냄

    • 헤더 필드
    • 요청 메시지와 마찬가지로 상태표시 행과 헤더 필드는 반드시 <CR><LF>로 끝나야 함 (빈 줄)
    • body에는 실제 리소스 데이터 포함

    댓글