HTTP 이해하기 – 요청 / 응답 / 메서드 / 헤더 / 응답코드

HTTP

웹에서는 HTTP(Hypertext Transfer Protocol)이라는 통신 프로토콜(규약/방법)을 사용해 정보를 주고 받습니다. HTTP는 클라이언트의 요청(request)과 서버의 응답(response)로 구성되어 있습니다. 클라이언트로 칭할 수 있는 웹 브라우저가 HTTP를 통해 텍스트나 이미지를 ‘요청’하면 서버는 ‘응답’으로 해당하는 정보를 클라이언트에 보냅니다. 이러한 정보는 브라우저가 사용자에게 보기 좋게 변환하여 띄워지게 되는 것입니다. 우리에게 아주 익숙한 ‘http://’로 시작하는 URL로 접속할 경우 데이터는 HTTP를 통해 전달됩니다.

HTTPS는 무엇일까요?

HTTP의 경우 클라이언트와 서버가 주고 받는 데이터가 암호화 되어 있지 않기 때문에 중간에 누가 하이재킹을 한다면 내용이 그대로 노출됩니다. 이러한 보안 취약점을 보완하기 위해 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)가 만들어졌습니다. HTTP에 통신의 인증과 암호화를 붙인 프로토콜이며, 통신에 일반 텍스트를 사용하는 대신에 SSL이나 TLS 프로토콜을 통해 데이터를 암호화합니다. HTTPS를 사용하는 웹페이지의 URI는 ‘http://’대신 ‘https://’로 시작합니다.

HTTPS는 보안은 물론 검색 엔진에서 웹사이트 노출이 HTTP보다 유리하다는 장점이 있습니다. SEO(Search Engine Optimization)을 위해서는 HTTPS를 사용하는 것이 좋다는 것을 참고해보세요.

요청(Requset) 메시지 형식

HTTP 통신 방식에서 클라이언트가 서버로 전달하는 요청 메시지는 ‘요청 라인’, ‘요청 헤더’, ‘줄바꿈(빈 줄), ‘요청 바디’로 구성되어 있습니다.

요청 라인(Request line)

ex) GET /posts HTTP/1.1

요청 라인은 HTTP 메서드(method), 요청 URI, 프로토콜 버전으로 구성됩니다. 특히 HTTP 메서드는 클라이언트가 URL을 통해 요청할 때 요청의 내용이 무엇인지 구분해주는 특성을 가지고 있습니다. 같은 ‘/posts’라는 URI에 요청을 할 때도 GET을 쓰냐, POST를 쓰냐에 따라 포스트의 내용을 가져오고 싶은지, 생성하고 싶은지 달리 할 수 있는 장점이 있습니다. 흔히 사용되는 메서드의 종류로는 GET(조회), POST(생성), PUT(수정), DELETE(삭제)가 있습니다.

요청 헤더(Request header)

ex) User-Agent: curl/7.37.1

헤더는 대부분 통신 내용을 확인하기 위한 부가적인 정보로 구성됩니다. 요청에 대한 자격 증명을 포함하는 Authorization이 대표적으로 요청 헤더에 포함되는 정보입니다.

빈 줄

헤더와 바디를 구분하는 기능을 합니다.

요청 바디(Request body)

바디에는 클라이언트가 전송할 데이터를 담습니다. 사용자가 작성하거나 선택한 데이터 내용 등이 바디에 담기게 됩니다.

응답(Response) 메시지 형식

HTTP 통신 방식에서 서버가 클라이언트로 전달하는 응답 메시지는 ‘상태 라인’, ‘응답 헤더’, ‘줄 바꿈’, ‘응답 바디’로 구성되어 있습니다.

상태 라인(Status line)

ex) HTTP/1.1 200 OK

상태 라인은 프로토콜 버전과 상태 코드(status code)를 포함합니다. 상태 코드는 응답 상태를 나타내기 위해 전달하는 3자리의 숫자입니다. 모든 HTTP 응답 코드는 맨 앞 자리의 수에 따라 5개로 분류할 수 있습니다.

  • 1XX : [informational] 요청을 받았고 프로세스를 진행한다.
  • 2XX: [success] 요청을 성공적으로 받았다.
  • 3xx: [redirection] 요청 완료를 위해서 추가 조치가 필요하다.
  • 4xx: [client error] 클라이언트의 요청 내용이 잘못되었거나, 요청을 처리할 수 없다.
  • 5xx: [server error] 서버가 요청을 수행하지 못했다.

수십개의 응답 코드가 있지만 흔히 사용 되는 코드는 아래와 같습니다.

  • 200 OK: 요청이 성공적으로 처리되었다.
  • 201 Created: 요청 내용에 따라 새로운 데이터가 생성되었다.
  • 204 No Content: 성공적으로 처리되었지만 되돌려 보낼 내용은 없다.
  • 206 Partial Content: 요청한대로 일부 내용만 보낸다.
  • 401 Unauthorized: 로그인 등을 통한 자격 증명이 없다.
  • 403 Forbidden: 로그인은 되어 있지만 자격 권한이 없다.
  • 404 Not Found: 요청하는 데이터가 없다.
  • 500 Internal Server Error: 서버 내부 오류가 발생했다.
  • 502 Bad Gateway: 프록시 서버나 게이트웨이가 서버 과부화나 네트워크 문제로 응답을 받을 수 없다.
  • 503 Service Unavailable: 서버 과부하로 인해 서버가 잠시 요청을 처리할 수 없다.
  • 504 Gateway Timeout: 프록시 서버나 게이트웨이가 상위 서버로부터 일정 시간내에 응답을 받지 못했다.

더 자세한 상태코드는 위키문서를 참고해보세요. 모두에게 합의된 내용을 준수하여 응답코드를 사용한다면 서버 개발자와 클라이언트 개발자 모두 즐거운 개발을 할 수 있을 것 입니다. 😀

응답 헤더(Response Header)

ex) Content-Type: text/html

응답 헤더 역시 요청 헤더와 비슷하게 통신 내용을 확인하기 위한 정보로 구성됩니다. 전송하는 데이터의 종류를 표현해주는 Content-Type이 대표적인 응답 헤더의 구성 요소입니다.

빈 줄

헤더와 바디를 구분하는 기능을 합니다.

응답 바디(Response body)

응답 바디에는 전송할 데이터를 넣어줍니다. 응답 파일의 내용을 전달할 때 사용하기도 합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *