GET 요청에서 동일한 매개 변수 이름에 대해 여러 값을 전달하는 올바른 방법


194

GET 요청에서 동일한 매개 변수 이름에 대해 여러 값을 전달하는 올바른 방법이 무엇인지 조사 중입니다.

다음과 같은 URL을 보았습니다.

http://server/action?id=a&id=b

그리고 다음과 같은 URL을 보았습니다.

http://server/action?id=a,b

내 이해는 첫 번째는 정확하지만 이것에 대한 참조를 찾을 수 없다는 것입니다. http 사양을 살펴 보았지만 URL의 '쿼리'부분을 구성하는 방법에 대해서는 아무것도 볼 수 없었습니다.

웹 서비스를 구축하는 경우 웹 서비스를 사용하는 사람들이 동일한 이름으로 여러 매개 변수를 전달하는 방법을 알 수 있도록 이러한 방법 중 어느 것이 표준인지 알고 싶습니다.

그렇다면 누군가 어떤 옵션이 올바른지 확인하기 위해 공식 참조 출처를 알려줄 수 있습니까?

답변:


166

실제로 정의 된 표준이 없습니다. 이 정보를 지원하려면 쿼리 문자열 장 에서 위키 백과를 살펴보십시오 . 다음과 같은 의견이 있습니다.

명확한 표준은 없지만 대부분의 웹 프레임 워크에서는 여러 값을 단일 필드와 연결할 수 있습니다. [3] [4]

또한 3.4 쿼리 섹션에서 RFC 3986을 살펴보면 여러 값을 가진 매개 변수에 대한 정의가 없습니다.

대부분의 응용 프로그램은 표시 한 첫 번째 옵션을 사용합니다 http://server/action?id=a&id=b. 이 정보를 지원하려면이 Stackoverflow 링크 및 ASP.NET 응용 프로그램과 관련된 이 MSDN 링크 를 살펴보십시오.이 값은 여러 값을 가진 매개 변수에 동일한 표준을 사용합니다.

그러나 API를 개발 중이므로 API 호출자가 쿼리 문자열을 만드는 데 많은 문제가 없으므로 가장 쉬운 방법을 수행하는 것이 좋습니다.


반대로 정보가 없으면 RFC3986이 표준을 지정하지 않으면 표준이 지정되지 않은 것입니다. 에두아르도 감사합니다.
stripybadger

19
id=a&id=b부울 AND 및 id=a,b부울 OR로 사용하는 것이 좋습니다 .
Alex Skrypnyk

17
FWIW PHP는와 같은 인수 읽기를 지원하지 않습니다 ?id=5&id=3. PHP는 여기서 id에 대해 하나의 값만 읽습니다. 내가 올바르게 기억한다면, PHP와 함께 작동하려면 다음과 같이 보일 것입니다 :?id[]=5&id[]=3
당신은

3
since you are developing the APIs, I suggest you to do what is the easiest for you, since the caller of the API will not have much trouble creating the query string.
Amr

2
id=a,b코마 ,가 유효한 구분 기호 라고 가정합니다 . 그러나 매개 변수 값은을 포함 할 수 있습니다 ,. 그런 다음 클라이언트 ,는 쿼리 매개 변수 값에서 이스케이프해야 합니다. 그러나 ;더 나은 결정을 내릴 수 있습니다. 이는 클라이언트와 서버가 API의 공식 구분 기호를 공유해야 함을 의미합니다. id=a&id=b더 오래 URL을 만드는 경우에도이 문제가 없습니다
로난 Quillevere

5

브라우저가 기본적으로 양식을 처리하는 방법을 살펴 보는 것이 좋습니다. 예를 들어 양식 요소 <select multiple>와 w3schools의이 예제에서 여러 값을 처리하는 방법을 살펴보십시오 .

<form action="/action_page.php">
<select name="cars" multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

PHP의 경우 :

<select name="cars[]" multiple>

w3schools.com에서 위의 라이브 예

위에서 "saab, opel"을 클릭하고 제출을 클릭하면 cars = saab & cars = opel 의 결과가 생성됩니다 . 그런 다음 백엔드 서버에 따라 매개 변수 cars 가 추가 처리 할 수있는 배열로 제공되어야합니다.

이것이이 문제를 처리하는보다 '표준적인'방법을 찾는 사람에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.