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