개발

GET에 붙어온 BODY를 서버는 어찌해야 하나

소년택이 2021. 6. 25. 12:56

비 리눅스 계열 개발자가 리눅스에 입문하면서 겪는 첫 허들은 커맨드라인 / 터미널 / 쉘 명령어이다. 주로 GUI 툴이나 IDE로만 개발을 하다보니 vi 하나면 뭐든지 하는 리눅스 계열 개발자들이 아주 신기하다. 지금이야 원격 저장소와 크로스 컴파일, 가상 머신 등의 도움으로 반드시 터미널에서 모든걸 할 필요는 없지만 여전히 터미널을 이용한 작업은 이미지 첨부 없이 간단하게 문자로만 정보를 전달할 수 있다는 점에서 스펙이나 개발자 가이드에 예제로 많이 쓰이고 있다.

그런 이유로 curl 사용법을 찾아 보던 중 재밌는 글을 읽었다.

HTTP GET 요청에 body를 붙여서 보내면 어떤 일이 벌어질까?
https://libsora.so/posts/http-get-request-with-body-and-http-library/
 

HTTP GET 요청에 body를 붙여서 보내면 어떤 일이 벌어질까? · /usr/lib/libsora.so

삽질의 시작 요새 유니티로 게임을 만들고 있다. 나는 서버쪽을 작업하고 있다. 서버는 HTTP 기반으로 구현하고 있다. 실시간 통신이 필요없으면 HTTP 쓰는게 편하잖아? RESTful API 같은 통신 규격으

libsora.so

요약하자면 글쓴이가 유니티 기반 게임의 서버 작업을 진행하는데 클라이언트에서 넘긴 body가 실행 환경에 따라 동작이 다르길래 툴과, 언어와, 라이브러리를 달리 해가며 실험해보는 내용이다. 결론은 (대체로) 환경별로 일관성이 존재하지만 - body를 받아 들이든, 안받아들이든 - 유니티는 에디터 환경과 빌드환경이 참조하는 라이브러리가 달라서 결과도 다르므로 문제가 있다는 논지이다.

그렇다면 정말로 GET 요청에 body를 붙여 보내면 서버는 그걸 받아들이는게 맞을까? RFC2616 section 9.3에 관련 내용을 정의하고 있다. 

9.3 GET
The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers... (후략)

URI는 식별자, 즉 주소 이므로(위키피디아) GET 요청에 사용한 주소 외의 정보를 사용할 필요는 없다. 물론 표준을 화이트리스트로 볼것인가, 블랙리스트로 볼 것인가에 따라 결론은 달라질 수 있겠지만 단순히 기술대로만 해석한다면 서버단에서 GET 요청에 대하여 body 정보를 처리 할 의무는 없는게 확실하다. 실제로 CURL manual에도 GET 요청에 data를 추가하면 query URL로 변경하여 송신한다고 기술하고 있다. 아마도 이러한 이유 때문에 body라 하지 않고 data라고 기술한것 같다.

 

덧1. 
링크를 타고 들어가 보면 맨 마지막 댓글이 거창하다. 나도 그랬지만... 누구나 용감한 시절은 있으니까. 특히 막 조금 큰물에 발을 담그고 한두해면 지날때 까지 내가 아주 위대한 줄 알다가 어느 순간 현타 씨게 오고나면 모두가 나의 구루 처럼 보이기 시작하더라.

덧2.
그래서... 결국 이 글을 쓰게 한 예제 코드는 동작하지 않았다. 오타였다. 하 이런...

'개발' 카테고리의 다른 글

GET에 붙어온 BODY를 서버는 어찌해야 하나  (0) 2021.06.25
첫 스터디 : 쿠버네티스 인 액션  (0) 2021.06.23
1 2 3 4 5 6 7 8 9