1. 개요
Query stringURL 끝에 물음표로 시작하는 문자열이다. 쿼리 스트링, 쿼리 파라미터라고도 부른다. SQL의 명령어를 이르는 쿼리와는 다르다.
검색 사이트에 ?query=XXX 라든지, ?redirect=URL 이런 것이 쿼리 문자열이다.
2. 생김새
쿼리 문자열은 기본적으로 ' ?'로 시작하며 키와 값의 쌍을 '키 =값'의 형태로 나타낸다. 여러 쌍은 ' &'로 구분한다. 같은 키가 중복될 경우 가장 나중에 선언된 값을 취한다.쿼리 문자열은 많은 곳에서 사용하는데, 예를 들어 나무위키에서 리다이렉트를 통해 어떠한 문서에서 왔다는 것을 표현할 때는 'from'이라는 키의 쿼리 문자열 값을 사용한다.
https://namu.wiki/w/쿼리%20문자열?from=무언가
따라서
위 주소의 웹페이지를 불러오면 위에 이런 문구가 뜬다.이 처럼 쿼리 문자열으로 클라이언트가 서버에 키와 값으로 'from'은 '무언가'라고 보낼 수 있다.
또 다른 값들을 한번에 여러 개 보내려면,이렇게 쿼리 문자열을 보내면 된다.
다만 사용할 수 있는 데이터에 제한이 있다. 무조건 ASCII로만 전송해야 하며, 그나마도 숫자, 로마자, 일부 특수문자[3]만 가능하다. 이 이외의 문자를 보내려면 퍼센트 인코딩을 거쳐야 한다.
3. 웹 서버에서
웹 서버[4]에서는 쿼리 문자열로 전달한 값을 GET 요청으로 받아들인다. 반대로, POST 요청[5]이나 쿠키, 세션 등 쿼리 문자열을 통하지 않고 값을 전달하는 방식도 있다.웹 API의 URLSearchParams 인터페이스를 활용하여 쿼리 문자열을 해석하여 사용할 수 있다.
URL에 그대로 싣는 방법에서 알 수 있듯, 보안상으로 가장 취약한 방식이다. CSRF 공격의 대다수가 쿼리 문자열을 이용한 공격이다.
[1]
쿼리 문자열을 시작한다는 토큰.
[2]
다른 값을 이어붙이는 토큰.
[3]
+, -, _, / 등
[4]
아파치 HTTP 서버,
IIS,
NGINX 등
[5]
<form method="post"> ...</form>
을 이용한 요청