Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

과거의 내가 미래의 나에게

HTTP 학습 (4-1) - 상태 코드(전체 개요, 1xx번대) 본문

카테고리 없음

HTTP 학습 (4-1) - 상태 코드(전체 개요, 1xx번대)

양바삭 2024. 3. 2. 18:58

클라이언트가 서버에게 리퀘스트를 보내고 그 결과가 어떻게 되었는지 코드로 알려주는데 이를 상태코드라고 한다. 

상태 코드는 3자리 숫자와 설명으로 나타내며 숫자의 첫 번째 자리는 상태 코드의 클래스를 의미한다고 한다. 상태 코드의 클래스는 5개로 정의되어있고 클래스의 정의만 지켜진다면 정의된 상태 코드를 변경하거나 독자적으로 상태 코드를 만들어도 상관없으니 너무 얽매일 필요는 없을 것 같다.

 

 

1. 1xx (Informational): 요청을 받아들여 처리중. 임시 응답으로 HTTP 1.1버전부터 추가되었다.

2. 2xx (Success): 요청을 정상적으로 처리했음

3. 3xx (Redirection): 요청을 완료하기 위해서 추가 동작이 필요

4. 4xx (Client Error): 요청의 내용이 잘못됨

5. 5xx (Server Error): 서버가 요청의 처리를 실패함

 

 

HTTP 응답에 포함되는 상태 코드는IANA(Internet Assigned Numbers Authority)라는 인터넷 할당 번호 관리기관이 HTTP 상태 코드 레지스트리라는 이름으로 관리하고 있다. 아래는 위의 사이트를 기준으로 나열해보겠다.

 

 

 

1xx (Information) : 요청을 받아서 처리중

클라이언트의 요청을 받았으며 작업을 계속 처리중이란 뜻이다. HTTP 1.1버전부터 추가되었으며 임시 응답의 개념으로 응답은 바디 없이 상태 라인, 헤더, 빈 줄로 종료된다.

 

  ■ 100 (Continue): 클라이언트가 진행 가능한지 여부를 물어볼 때 가능하다는 응답을 할 때 사용되는 코드이다. 보통 클라이언트가 아주 큰 데이터를 서버에 보내기 전에 서버가 이를 수용가능한지 먼저 물어보기 위해 사용한다고 한다. 만약 별도로 묻지 않고 다짜고짜 데이터를 보냈다가 서버가 거절하면 보낸 비용이 아깝기 때문에 사전에 물어보는 듯 하다. 

아래 예시에는 메세지의 내용을 전송가능한지 확인하고 응답코드로 가능하다는 답을 전송한 상황이다.

// 클라이언트 요청
POST /api/example
Host: example.com
Content-Type: application/json
Expect: 100-continue

{
    "key": "value"
}

// 서버 응답
HTTP/1.1 100 Continue

 

100 상태코드를 사용함에 있어서 어떠한 과정을 거치는지에 대한 좋은 설명글이 있어서 공유한다.

 

 

  ■ 101 (Switching Protocols): 클라이언트의 프로토콜 변경 요청에 대한 응답이다. 

HTTP/1.1에서 새로 정의된 상태 코드로, HTTP 통신에서 websocket 통신으로 변경하거나, HTTP/1.1에서 HTTP/2로 변경하고 싶을 때 서버에게 업그레이드 요청을 하는 것이다.

주로 websocket으로 통신을 변경할 때 많이 쓰인다는데, 상담봇에서 정해진 답에 대한 것은 HTTP 통신으로 하다가 상담원 연결하기로 1:1 채팅형식으로 변경되면 websocket으로 바뀔텐데 이 경우 101 상태코드가 사용될까? 나중에 상담봇하는 곳을 가서 직접 통신을 한 번 살펴봐야겠다.

아래의 예시는 웹소켓으로 업그레이드를 요청하는 코드이다.

// 클라이언트 요청
GET /example HTTP 1.1
Connection: upgrade
Upgrade: websocket

// 서버 응답
HTTP/1.1 101 Switching Protocols
Connection: upgrade
Upgrade: websocket

 

101 상태코드도 좋은 설명글이 있어서 공유한다. 101코드와 관련되어 설명 및 일반적인 문제 그리고 SEO 관련 이야기도 있으니 한 번 구경하면 좋을 것 같다.

 

 

  ■ 102 (Processing): 서버가 요청을 수신하였으며 이를 처리중이라는 것을을 알려주는 응답이다. 서버에서 처리하는 데 오랜 시간이 걸릴 것 같아 클라이언트에서 타임 아웃이 발생하지 않도록 해당 응답 코드를 보내곤 한다.

해당 코드는 MDN에서 보면 Deprecated 상태가 되었다고 하는데... 왜 그런지는 찾아봤는데 모르겠다! 

 

또한 검색하다보니 webDav 전용이라고 되어있던데, webDav는 결국 파일의 업로드/다운로드에 관련된 HTTP의 확장된 프로토콜일 뿐, 결국 102 상태코드는 webDav 전용이 아니라 http 통신에서도 가능은 하지만, 파일전송에 있어서 webDav 프로토콜이 자주 쓰이고 102 상태코드는 파일 전송과 같이 오래걸리는 곳에 쓰이니 webDav에서 자주 쓰이는 것일 뿐 아닌가? 100번대 코드는 아리송덩어리다.

 

 

  ■ 103 (Early Hints): 서버가 요청을 수신하였으며 이를 처리중이라는 것을을 알려주는 응답이지만 102 상태코드와 다른 점은 나중에 반환될 리소스와 괸련된 힌트나 정보를 먼저 제공해줌으로써 클라이언트는 미리 대비를 할 수 있다.

해당 코드를 서버에서 설정해놓으면 클라이언트에서 요청했을 때 조금이라도 빨리 약간의 정보라도 제공할 수 있어서 빠른 페이지 로드가 가능하게 해줌으로 사용성을 향상시킬 수가 있다.

 

103 상태코드는 비교적 최근에 나온 코드로, HTTP/2와 HTTP/3에서 사용된다고 한다. 해당 코드가 나오게 된 흐름과 왜 HTTP1에서는 사용 안되는지 알고 싶다면 이 블로그가 번역한 글을 읽어보면 좋을 것 같아 첨부한다.

 

 

 

 


 

 

1xx대 상태코드는 현업에서는 자주 사용되지 않는다고 하는데 왜 그런지는 잘 모르겠다. 각 코드들을 살펴보면서 쓰이는 그 의미에 대해서 공감하고 충분히 유용하게 사용될 것 같고 또 해외글을 읽으면 몇몇 사용하고 있는 사례가 있는 것 같은데, Deprecated 상태인 것도 있는 등 여러모로 사용은 안되는 듯 하다.

지금의 내가 추론키로는 아마 작업에 대한 결론을 내는 것이 아닌 그저 작업중이라는 것을 나타내기에 불완전성을 띄워 사용성에 있어서 불안정적인 요소를 유발시키기에 그런 것일까 생각하고 있을 뿐이다.

무언가 내가 놓치고 있는 것이 있는지... 나중에 기회가 되면 해당 부분에 대해 다른 개발자들과 이야기를 나눠보고 싶다.

 

 

 

 


참고 문서

Comments