[Network] HTTP, 자주쓰이는 HTTP Status code(상태코드) 알아보기

muz·2021년 12월 28일
0
post-thumbnail

HTTP와 HTTPS

HTTP

HTTP(Hypertext Transfer protocol)은 하이퍼텍스트 전송 프로토콜이다. 쉽게 말해 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 웹에서 이루어지는 모든 데이터 교환의 기초이자 client-server 프로토콜이기도 하다.

HTTP는 requestresponse로 이루어진 프로토콜이라고 생각하면 쉽다.
client가 server에게 request(요청)을 보내고, server는 이에 대한 response(응답)을 보내준다.

HTTPS

HTTPS(Hypertext transfer protocol secure)은 HTTP에 보안이 추가된 것이다.

  • 기존 HTTP의 문제점
    - HTTP는 client와 server가 데이터를 주고 받을 때 암호화 처리가 되어있지 않아 제 3자가 그 데이터를 가로채서 읽을 수 있었다.

그러나 HTTPS는 SSL이나 TLS같은 서로 보안 관계가 형성된 client와 server끼리 데이터를 안전하게 주고받기 때문에, 제 3자가 그 내용을 쉽게 볼 수 없다.

HTTP의 발전?

  • 1989 HTTP가 처음 등장함
  • 1994 HTTPs가 등장
  • 1997 HTTP v1 (HTTP, HTTPS로 사용 가능)
    : client와 server가 데이터를 주고받을 때 모든 것을 text형태로 주고받았기 때문에 제 3자가 봤을 때 그 내용을 바로 이해할 수 있었다. 또한 HTTP안에 있는 헤더에 작성된 텍스트들도 그대로 주고 받았으며, 압축하지 않고 썼기에 사이즈가 굉장히 컸다. 뿐만아니라 한번에 하나의 파일만 주고받을 수 있었다.
  • 2015 HTTP v2 (HTTPS)
    : 데이터를 주고받을 때 text를 binary(rowdata)형태로 변환하여 주고 받았다. 또한 헤더부분도 압축해서 주고 받았다. v2부터 는 여러 개의 파일을 동시에 주고받는 것이 가능해졌다. v1에 비해 보안, 성능이 개선된 것이다.
  • 2019~ HTTP v3 (HTTPS)
    : 기존의 TCP protocol을 베이스로 해서 만든 HTTP와 달리, 현재 UDP를 기반으로 해서 개발중이다.

client와 server가 통신하는 방법


1. HTTP를 사용하면 처음에 TCP connection이 생긴다. TCP connection으로 Client와 Server가 연결된다.
2. Client는 자신이 어떤 행동을 원하는지에 대한 request method와 server의 특정 문서, 특정 경로에 있는 데이터를 받기를 원하는지에 대한 URL, Header 등의 다양한 정보를 포함해서 server에게 요청한다.
3. server는 client로부터 받은 요청에 해당하는 내용과 요청이 성공했는지, 실패했는지를 알려주기 위한 상태코드를 함께 묶어서 응답으로 보낸다.

이후 더이상 보낼 데이터가 없다면 TCP connection이 닫혀서 종료된다.

HTTP Status code

위에서 server에서 client에게 response를 보낼 때에는 status code를 함께 포함해서 보낸다고 했다. status code는 특정 HTTP 요청이 성공적으로 완료되었는지에 대해 알려준다. 3자리의 숫자로 이루어져 있으며 이를 통해 server에서 어떻게 처리했는지를 알 수 있다.

1xx: 어떤 정보를 제공하는 응답
2xx: 서버에서 성공적으로 처리되었을 때 보내줌
3xx: 리다이렉트. 경로를 알려줄 때 씀
4xx: Client 에러. Client가 잘못된 방식으로 요청했을 때 발생하는 에러
5xx: Server 에러. Server에서 예상치 못한 에러가 발생했을 때 나타나는 에러

자주 쓰이는 status code들

1xx

  • 100: 임시적인 응답. 지금까지 상태가 괜찮음을 알려줌
  • 102: server가 요청을 수신했고, 이를 처리하는 중임을 알려줌
  • 103: server가 응답을 준비하는 동안 사용자가 사전 로딩을 시작할 수 있도록 함

2xx

  • 200: 요청이 성공적임을 알려줌
    - 성공의 의미는 HTTP 메소드(GET, HEAD, PUT, TRACE)에 따라 달라짐
    • GET: 리소스를 가져왔고, 메시지 바디에 전송됨
    • HEAD: 개체 헤더가 메시지 바디에 있음
    • POST: 리소스가 명시하는 행동의 결과가 메시지 바디에 전송됨
    • TRACE: server가 요청받은 메시지가 메시지 바디에 포함되어 있음
  • 201: 요청이 성공적이었고, 그 결과 새로운 리소스가 생성됨을 알림
  • 204: 요청은 처리했으나 요청에 대해 보내줄 데이터가 없음을 알림

3xx

  • 301: 요청한 리소스의 URI가 변경되었음을 알림
  • 302: 요청한 리소스의 URI가 일시적으로 변경되었음을 알림 (즉, 당분간 임시적으로 다른 URI를 쓴다는 것)
  • 303: Client가 요청한 리소스를 다른 URI에서 GET요청을 통해 얻어야 할 때, server가 client에 직접 보내는 응답
  • 307: Client가 요청한 리소스가 다른 URI에 있을 때 알림
  • 308: 리소스가 이제 HTTP응답 헤더의 Location에 명시된 영구히 다른 URI에 위치하고 있음을 알림

4xx

  • 400: 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 의미
  • 401: 비인증(로그인 안했을 때) 상태에서 요청할 때 알림
  • 403: Client가 해당 컨텐츠에 접근할 권리가 없을 때 알림
  • 404: Server가 요청받은 리소스를 찾을 수 없을 때, 즉 브라우저에서는 알려지지 않은 URL을 의미함
  • 405: 요청한 메서드는 server에서 알고 있지만, 제거되었고 사용할 수 없을 때 의미함
  • 409: 요청이 현재 server의 상태와 충돌될 때 보냄

5xx

  • 500: Server가 처리 방법을 모를 때
  • 502: Server가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안, 잘못된 응답을 수신했음을 의미함
  • 503: Server가 요청을 처리할 준비가 되지 않았을 때 보냄 (보통 유지보수를 위해 작동이 중단되었거나, 과부하가 걸렸을 때)
profile
Life is what i make up it 💨

0개의 댓글