http post method로 request 할때 request body는 물론이고 query string도 함께 사용할 경우에 대한 spec가 정의되어 있나요..?

조회수 3848회
POST /tokens?epoch=12345 HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: example.com
Connection: close
Content-Length: 11

epoch=54321

위와 같은 HTTP POST reqeust가 있다고 했을때

query string에도 epoch라는 변수가 있고, request body에도 epoch라는 변수가 있을때

웹서버는 epoch의 값으로 12345를 받아야하나요 54321로 받아야 하나요...?

python django 같은 경우엔 request.GET['epoch']reqeust.POST['epoch']로 각각 12345, 54321 이렇게 있을꺼 같긴한데요...

혹시 웹서버가 query string와 reqeust body를 구분하지 않고, 같은 변수(?)로 처리한다면

어떤게 우선인지 궁금합니다.

아 그리고 애초에 POST reqeust시에 query string를 같이 사용하는게 비표준인지 표준인지도 궁금하고요..

ruby on rails의 경우엔 post시에 request body는 물론 query string도 같이 받아지긴 하는것 같긴 하더라고요.

그와 관련된 rfc spec이 있나요...? 혹시 아시는분은 링크도 함께 부탁드립니다..!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • query string 의 경우 URL파트에 포함됩니다.

    따라서 방식이 get이 아닌 post , put에 사용하셔도 별다른 제약은 없습니다.

    하지만 질문 주신것 처럼 파라메터 값이 중복될 경우 프레임워크 마다 구현이 조금씩 다를 수 있는 등 모호한 부분이 생길 수 있기 때문에 저는 최대한 사용하지 않습니다.

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.2

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 프레임웍마다 구현이 조금씩 다른 이유는 표준이 없기 때문인가요? 아니면 표준은 있지만 각 프레임웍마다 알아서 구현한건지...? 알 수 없는 사용자 2016.9.8 14:01
    • @root 구현상의 문제로 보입니다. 다른 경우로 css나 dom 등도 모두 spec이 정해져 있지만 브라우저마다 구현이 조금씩 다릅니다. 알 수 없는 사용자 2016.9.8 14:38
    • @정대원 그럼 제가 질문한 경우도 spec가 정해져있는데 구현이 다른것 뿐인가요..!? 그 spec가 정의된 문서좀 볼 수 있을가요...? 답변 본문에 링크해주신건 URL 에 대한 스펙인거죠? 알 수 없는 사용자 2016.9.8 15:33
    • @root 글세요, play (scala)같은 경우에는 queryString 과 body에 값을 취하는 부분은 달랐습니다. express(node)도 마찬가지였고요. 어떤 데이터가 우선해야 한다는 등의 세부적인 스펙은 찾지 못했습니다. url파트와 body파트가 별개이므로 일반화 해서 같은 데이터를 취하는 방식으로 구현했다면 구현 오류가 아닐까 싶네요. 알 수 없는 사용자 2016.9.8 16:07

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)