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-2) - 상태 코드(2xx번대) 본문

카테고리 없음

HTTP 학습 (4-2) - 상태 코드(2xx번대)

양바삭 2024. 3. 10. 19:11

이번에는 저번 시간에 이어 200번대 상태 코드를 알아 볼 것이다. 300번대까지 한꺼번에 작성하고싶지만 처리해야할 다른 일이 많아서 오늘은 짧게 가야할 것 같다.

 

 

2xx (Success): 요청이 정상적으로 처리됨

클라이언트의 리퀘스트를 정상적으로 처리했다는 뜻이다. 단순히 성공했다고 알리는 것 뿐 아니라 어떠한 행위가 성공했는지에 대한 정보가 나타나있으니 잘 구분해서 보자.

 

■  200 (OK): 서버가 클라이언트의 요청을 성공적으로 처리하였을 때의 응답 코드이다.

어떤 HTTP 메소드가 사용되었냐에 따라 성공의 의미가 달라진다.

* GET: 요청한 리소스를 불러와서 메시지 바디에 전송 완료
* POST & PUT: 요청한 수행 결과로 나온 리소스가 메시지 바디에 전송 완료
* DELETE: 삭제 완료
* HEAD: 개체 헤더가 메시지 바디에 있음
* TRACE: 메시지 바디에 서버에서 수신한 요청 메시지를 포함함

 

 

■  201 (Created): 클라이언트의 요청을 성공적으로 처리했으며 그 결과로 새로운 데이터가 생성되었을 때 반환하는 응답 코드이다.

주로 리소스를 생성하기 위해 사용되는 HTTP 요청인 POST나 PUT 사용 시 볼 수 있는 상태코드이며, 해당 통신이 성공했을 때 받을 수 있다. 응답 헤더에  Location이나 Content-Location을 이용하여 생성된 리소스에 대한 URL를 같이 제공해준다면 더나할위 없이 좋을 것이다.

요청을 성공했다는 점에서 200과 유사한데, 201은 새로운 리소스가 생성되었다는 면을 강조하기 위한 상태코드이므로 정확한 의미로 사용하려면 구분하는 것이 좋을 것 같다. 

 

 

■  202 (Accepted): 클라이언트의 요청을 수신하였지만 처리가 완료되지 않았을 때 응답 코드이다. 

서버에 요청이 들어오면 바로 결과를 알려주어야하나, 요청에 대한 작업이 시간이 오래 걸릴 것 같은 경우 이를 비동기로 처리하고 후에 작업이 완료되면 나중에 알려주겠다는 의미이다. 이를 위해 응답 본문에는 반드시 요청에 대한 상태와 요청의 처리를 어떻게 알 수 있는지에 대한 방법을 포함시켜야 할 것이다.

 

그런데 알다시피 HTTP 프로토콜은 단방향 통신이다. 서버는 클라이언트에서 요청이 들어와야 응답을 해줄 수 있는데 어떻게 먼저 클라이언트에게 완료된 사실을 알려준다는 말인가? 이를 위한 방법으로는 Callback과 polling 방식이 있다.

 

1. Callback

서버가 클라이언트의 요청을 받고 202 상태코드를 보낸 후에 작업을 마저 하고 작업이 끝날 시 callback 함수를 통해 push 방식 중 하나를 실행하여 서버가 먼저 클라이언트에게 전달하는 방법이다.

< push 방식 >
서버가 클라이언트에게 먼저 데이터를 보내는 방법을 push방식이라고 한다. HTTP 프로토콜의 특성상 서버가 클라이언트에게 먼저 보낼 수는 없지만, 웹의 발전에 따라 최대한 그 방법이 가능하도록 다양한 방법을 고안했고 이것을 push 방식이라 한다.

push 방식에는 HTTP Long Polling, Websockets, Server-Sent-Events(SSE) 등이 있고 이에 대한 설명은 사이트1, 사이트2를 첨부해 놓는다.

 

2. Polling

이 방법은 아주 간단하다. 서버가 클라이언트의 요청을 받고 202 상태 코드를 보내면, 클라이언트는 202 코드를 더이상 받지 않을 때까지 동일한 URL의 HTTP 통신을 계속해서 시도하여 현재 진행상태를 확인받는 것이다.

 

사실 Polling 방식은 결국 callback의 방안 중 하나가 아닌가..결국 두 방식은 서버가 클라이언트에게 먼저 통신할 수 있는 수단에 유무에 따라 결정되는 것이 아닌가...싶지만 여하튼 서버에서 코드가 구성되는 방식은 다른 것 같기에 일단 구분해서 써놓았다!

 

 

■  203 (Non-Authoritatice-Infomation): 돌려받은 응답 헤더가 오리진 서버로부터 제공된 것이 아니라 다른 곳에서 수신된 정보를 제공할 때의 응답 코드이다. 즉, 요청에 대한 정보가 신뢰할 수 있는 출처로부터 온 정보가 아님을 의미한다.

주로 프록시 서버에 의해 발생하는 상태 코드로, 서버와 클라이언트의 중계 역할을 하는 프록시 서버가 클라이언트의 요청에 대해 오리진 서버에서 받아오는 것이 아닌, 보안 정책이나 사용자 지정 규칙 등의 이유로 다른 곳에서 정보를 가져와 반환하거나 혹은 프록시 서버에서 자체적으로 캐시된 데이터를 반환할 때 사용된다. 

 

 

■  204 (No Content): 요청을 받아 처리하는 데 성공했지만 응답에 콘텐츠는 포함하지 않는 경우의 응답 코드이다.

서버가 요청을 잘 수행했지만 클라이언트에게 별개로 딱히 줄 것은 없을 때 사용하는데, 보통 처리에 대한 결과 정보를 붙이는 경우가 많으니 잘 쓰이지는 않는다 한다.

응답 body에 null, [] 등 빈 데이터로 응답하는 것이 아닌 정말 응답 body 자체가 존재하지 않는다.

 

 

■  205 (Reset Content): 요청을 처리했으며 이후 사용자 에이전트에게 문서 뷰를 리셋하라고 알려주는 응답 코드이다.

즉, 브라우저를 한 번 새로고침하라고 알려주는 브라우저를 위한 응답 코드라 할 수 있다.

 

 

■  206 (Partial Content): 클라이언트가 Range 헤더를 통해 범위가 지정된 리퀘스트를 요청했을 때 해당 응답 코드와 함께 Range 헤더에 명시된 데이터의 부분을 전달한다. 

클라이언트의 range 요청에 따라 서버가 가지고 있는 전체 리소스 중의 일부만 반환되었을 때 사용된다. 보통 클라이언트가 대용량의 파일을 요청했을 때 이를 한 번에 받는 것이 아닌 조각으로 나누어 받을 때 사용한다.

 

 

■  207 (Multi-Status): 요청에 대한 처리결과가 하나가 아니라 여러 개일 경우의 응답 코드이다. 여러 파일을 한 번에 업로드하거나 여러 파일의 상태를 조회하는 경우같이 다수의 리소스에 대한 작업을 한 번에 수행할 때 해당 응답을 받는다. WebDAV 전용이라 하며 일반적인 웹에서는 자주 볼 수 없는 상황이다.

 

 

■  208 (Already Reported): 클리어언트의 요청이 이전에 서버에 의해 처리되었음을 의미한다. MDN에서는 오타인지 뭔지 208의 메시지가 Multi-Status로 되어있어서 약간 헤맸다. WebDAV 전용이라 한다.

 

 

■  226 (IM(Instance Manipulation) Used): 서버가 GET 요청에 대한 리소스의 의무를 다 했고, 응답이 하나 또는 그 이상의 인스턴스 조작이 현재 인스턴스에 적용이 되었음을 알려준다...라고 하는데 의미를 잘 모르겠다.

이것 저것 보고 요약해보려 시도했는데 해당 사이트에서 설명이 제일 잘 되었으므로 그냥 주소만 첨부한다.

 

 

 

 


참고 문서

Comments