URL 매개 변수와 쿼리 문자열의 차이점은 무엇입니까?


90

URL에서 매개 변수와 쿼리 문자열 사이에 많은 차이가 보이지 않습니다. 그렇다면 차이점은 무엇이며 언제 다른 하나를 사용해야할까요?


1
내가 아는 한 두 가지가 일반적으로 동일하게 사용되기 때문에 컨텍스트가 있습니까?하지만 귀하의 경우는 컨텍스트에 따라 다를 수 있습니다.
Allan S. Hansen

나는 구체적인 맥락이 없으며 일반적인 질문입니다. 어떤 경우에 다른 방법 대신 한 가지 방법을 사용해야합니다. 이 둘은 다른 용도로 사용되어야합니다.
Konst

개인적으로-저는 주로 변수 또는 메서드 호출 컨텍스트에서 사용할 때 매개 변수라는 단어를 사용하고 URL 컨텍스트에서 말할 때 쿼리 문자열을 사용합니다. (예 : 쿼리 문자열은 메서드에 대한 매개 변수로 분할됩니다.) 그러나 그것은 단지 언어이기 때문에 문맥과 상황이 다르고, 당신이 "느낌"을 가질 때 누구도 당신을 쫓아 낼 것 같지 않습니다. :).
Allan S. Hansen

답변:


84

질의 구성 요소는 첫 번째로 표시되는 ?URI에있다. "쿼리 문자열"은 동의어 일 수 있습니다 (이 용어는 URI 표준에서 사용되지 않음).

쿼리 구성 요소가있는 HTTP URI의 몇 가지 예 :

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b

( 쿼리 구성 요소에서 허용되는 문자 목록 )

쿼리 구성 요소의 "형식"은 URI 작성자에게 달려 있습니다. 일반적인 규칙 ( 단, URI 표준에 관한 한 규칙에 지나지 않음 ¹)은 키-값 쌍 (일명)에 쿼리 구성 요소를 사용하는 것입니다. 위의 마지막 예와 같은 매개 변수 : bar1=a&bar2=b.

이러한 매개 변수는 다른 URI 구성 요소, 즉 경로 ² 및 단편에도 나타날 수 있습니다. URI 표준에 관한 한 어떤 구성 요소와 어떤 형식을 사용할지는 귀하에게 달려 있습니다.

경로, 쿼리 및 단편에 매개 변수가있는 예제 URI :

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ URI 표준은 쿼리 구성 요소에 대해 다음과 같이 말합니다 .

[…] 쿼리 구성 요소는 "키 = 값"쌍의 형태로 식별 정보를 전달하는 데 자주 사용됩니다. […]

² URI 표준은 경로 구성 요소에 대해 말합니다 .

[…] 세미콜론 ( ";") 및 같음 ( "=") 예약 문자는 종종 해당 세그먼트에 적용 할 수있는 매개 변수 및 매개 변수 값을 구분하는 데 사용됩니다. 쉼표 ( ",") 예약 문자는 종종 유사한 목적으로 사용됩니다.


1
매개 변수와 쿼리가 다릅니다. tools.ietf.org/html/rfc2396.html의
cowlinator

@cowlinator : (RFC 2396은 더 이상 사용되지 않지만 현재 표준 인 RFC 3986은 경로 구성 요소의 매개 변수에 대해 유사한 내용을 말합니다 .) 나는 그들이 동일하다고 말하지 않았습니까? URI 작성자 는 쿼리 구성 요소에 매개 변수를 지정할 있으며 (내 대답에 설명 된대로) 경로 구성 요소에 매개 변수를 지정할 수도 있습니다 (참조에 설명 된대로). 두 경우 모두 규칙에 불과하며 표준에서 정의하는 것은 없습니다. -내 대답에 대한 변경을 제안 하시겠습니까? OP가 경로의 매개 변수를 의미한다고 생각하십니까?
unor

30

매개 변수는 URL 경로 내에 나타날 수있는 키-값 쌍이며 세미콜론 문자 ( ;)로 시작 합니다.

쿼리 문자열은 경로 (있는 경우) 뒤에 나타나며 물음표 문자 ( ?)로 시작합니다.

매개 변수와 쿼리 문자열 모두 키-값 쌍을 포함합니다.

A의 GET요청 매개 변수는 URL 자체에 나타납니다 :

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

A의 POST요청 매개 변수뿐만 아니라 (같은 내용으로 함) 데이터 스트림에서, URL 자체에 나타날 수 있습니다.

쿼리 문자열은 항상 URL의 일부입니다.

매개 변수는 form-dataPOST 메소드를 사용할 때 데이터 스트림에 묻힐 수 있으므로 URL에 나타나지 않을 수 있습니다. 예, POST요청은 매개 변수를 양식 데이터 URL 로 정의 할 수 있으며 매개 변수가 여러 값을 가질 수 있으므로 일관성이 없습니다.

지금까지이 동작에 대한 설명을 찾지 못했습니다. POST요청 에서 매개 변수를 "숨기기 해제"하는 것이 유용 할 수 있으며 요청을 처리하는 GET코드가 POST. 물론 이것은 URL의 매개 변수를 지원하는 서버 코드에서만 작동 할 수 있습니다.

더 나은 통찰력을 얻을 때까지 요청의 form-data데이터 스트림 에서만 매개 변수를 사용하는 것이 좋습니다 POST.

출처 :

모든 개발자가 URL에 대해 알아야 할 사항

RFC 3986

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