developer tip

쿼리 문자열 키는 대소 문자를 구분합니까?

copycodes 2020. 12. 4. 19:15
반응형

쿼리 문자열 키는 대소 문자를 구분합니까?


다음과 같은 URL이 있다고 가정합니다.

http://www.example.com?key=123&KEY=198

그러면 결과는 무엇입니까

request.querystring("key")

and 

request.querystring("KEY")

나는 약간 혼란 스럽습니다.


URI에 대한 RFC 는 다음과 같이 말합니다.

6.2.2.1. 케이스 정규화

URI가 일반 구문의 구성 요소를 사용하는 경우 구성 요소 구문 동등성 규칙이 항상 적용됩니다. 즉, 체계와 호스트는 대소 문자를 구분하지 않으므로 소문자로 정규화해야합니다. 예를 들어 URI는 http://www.example.com/ 과 동일합니다 .

다른 일반 구문 구성 요소는 체계에서 특별히 정의하지 않는 한 대소 문자를 구분하는 것으로 간주됩니다 (섹션 6.2.3 참조).

스키마 (여기서는 "http"), 호스트 (서버 이름)는 대소 문자를 구분하지 않지만 어쨌든 소문자 여야합니다. 나머지는 구분하지 않아야한다고 명시 적으로 말하는 다른 체계를 사용하지 않는 한 대소 문자를 구분합니다.

따라서 key와 KEY는 사양에 따라 모든 http 기반 URI에서 다른 것입니다.

편집 : @Nicholas는 기관이 수락하는 것을 정의한다고 가정하는 데 부분적으로 잘못되었습니다. 그것은 자신의 URI를 정의하는 사용자 정의 체계 및 기관에 해당되지만 http는 모든 사람이 준수하는 잘 정의 된 사양입니다 (또는 http 쿼리를 가질 수 있습니다 예를 들어 파이프 문자를 구분 기호로 사용하십시오. 거기에 혼란을 상상해보십시오!)

HTTP에 대한 RFC 사양 은 다음과 같습니다.

체계와 호스트는 대소 문자를 구분하지 않으며 일반적으로 소문자로 제공됩니다. 다른 모든 구성 요소는 대소 문자를 구분하는 방식으로 비교됩니다. "reserved"집합에있는 문자 이외의 문자는 백분율 인코딩 된 옥텟과 동일합니다. 일반 형식은 인코딩하지 않는 것입니다 ([RFC3986]의 섹션 2.1 및 2.2 참조).

따라서 HTTP 체계에 대한 사양에 정의 된 URI의 쿼리 부분은 대소 문자를 구분합니다. Microsoft가 쿼리 문자열에 대해 대소 문자를 구분하지 않는 파서를 가지고 있다면 사양을 따르지 않는 것입니다. 이 정도의 까다 로움이 정말로 중요하다고 생각하는 것은 아닙니다.


@gbjbaanb의 대답이 잘못되었습니다. RFC는 쿼리 문자열에 허용되는 문자 집합 만 지정합니다. URI 경로조각 구성 요소 마찬가지로 쿼리 URI 구성 요소 는 리소스를 제공하는 권한에만 의미 가 있습니다.

이 항목이 대소 문자를 구분하는지 여부는 전적으로 권한에 달려 있습니다.

C # 및 IIS의 경우에서 구문 분석 된 쿼리 문자열에 대한 백업 저장소 HttpRequest객체는 것입니다 System.Collections.Specialized.NameValueCollection있는 대소 문자 구분 될 일 (기본적으로).

해당 클래스는 다른 생성자를 제공하므로 서로 다른 동등 비교자가 제공 될 수 있으므로 구현시 대소 문자를 구분하지 못하도록 방지 할 수있는 방법이 전혀 없습니다.

또한 페이지 자체 (및 클라이언트 측 자바 스크립트)가 원시 URI에 액세스 할 수 있으므로 원하는대로 자유롭게 수행 할 수 있습니다.

HTML 양식 제출의 결과로 쿼리 문자열이 빌드 된 경우 키 (이름) name는 HTML 사양에서 대소 문자를 구분한다고 말하는 양식 컨트롤 속성 의 값에서 가져옵니다 . 하지만 내가 아는 한 그 누구도 그렇게하지 않습니다.

따라서 하루가 끝나면 요청 처리기가 쿼리 문자열에서 무엇을 기대하는지 알아야합니다. 대소 문자를 구분할 수도 있고 그렇지 않을 수도 있습니다.


따르면 hurl.it , key동일한 것 123KEY, 198. 두 개의 다른 쿼리 문자열 로 액세스 할 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/24699643/are-query-string-keys-case-sensitive

반응형