1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Помимо того, что данные на сервер можно передавать через<em>body</em>, которое используется при<em>POST</em>запросах и отправке форм, мы также можем передать так называемую строку запроса<em>query string</em>. Это параметры<em>ключ=значение</em>, которые располагаются в<em>request line</em>после указания глагола<em>POST</em>или<em>GET</em>.</p>
1
<p>Помимо того, что данные на сервер можно передавать через<em>body</em>, которое используется при<em>POST</em>запросах и отправке форм, мы также можем передать так называемую строку запроса<em>query string</em>. Это параметры<em>ключ=значение</em>, которые располагаются в<em>request line</em>после указания глагола<em>POST</em>или<em>GET</em>.</p>
2
<p>Стоит сказать, что указатель на конкретную страницу может отсутствовать и параметры можно передавать на основную страницу домена.</p>
2
<p>Стоит сказать, что указатель на конкретную страницу может отсутствовать и параметры можно передавать на основную страницу домена.</p>
3
<p><em>query string</em>имеет такой же формат, как и строка в<em>body</em>при<em>POST</em>запросе, только в начале ставится знак ?. После него мы можем передавать параметры key=value&key2=value2 и так далее.</p>
3
<p><em>query string</em>имеет такой же формат, как и строка в<em>body</em>при<em>POST</em>запросе, только в начале ставится знак ?. После него мы можем передавать параметры key=value&key2=value2 и так далее.</p>
4
<p>Параметры<em>query string</em>не имеют никакого отношения к<em>GET</em>-запросам, хотя многие разработчики называют их<em>GET</em>-параметрами. На собеседованиях иногда задают вопрос: "Можно ли одновременно отправить<em>POST</em>и<em>GET</em>параметры?". Правильный ответ - конечно можно, так как никакой связи между ними нет. Более того, в некоторых языках существуют способы получения этих данных отдельно друг от друга. Например, в PHP есть глобальный массив $_REQUEST, в который попадают как параметры, переданные через<em>query string</em>, так и переданные в<em>POST</em>.</p>
4
<p>Параметры<em>query string</em>не имеют никакого отношения к<em>GET</em>-запросам, хотя многие разработчики называют их<em>GET</em>-параметрами. На собеседованиях иногда задают вопрос: "Можно ли одновременно отправить<em>POST</em>и<em>GET</em>параметры?". Правильный ответ - конечно можно, так как никакой связи между ними нет. Более того, в некоторых языках существуют способы получения этих данных отдельно друг от друга. Например, в PHP есть глобальный массив $_REQUEST, в который попадают как параметры, переданные через<em>query string</em>, так и переданные в<em>POST</em>.</p>
5
<p>Но как понять, когда и для чего использовать<em>query string</em>? Для этого нужно определить, что на самом деле значат глаголы HTTP. Семантика HTTP-глаголов выражается не только в том, какой вам будет возвращен ответ, а еще и в том, как можно с ним работать. Глагол<em>GET</em>считается идемпотентным. Это означает, что его повторное выполнение всегда возвращает один и тот же результат, т.е. это обычный запрос. Мы спрашиваем систему о чем-то, она возвращает нам данные и при этом не изменяет своего внутреннего состояния. Таким образом любой повторный запрос отработает точно так же - детерминировано. В качестве аналогии можно привести чистую функцию. В реальности состояние системы конечно же может поменяться и мы не можем это контролировать, поэтому кэширование не является тривиальной задачей.</p>
5
<p>Но как понять, когда и для чего использовать<em>query string</em>? Для этого нужно определить, что на самом деле значат глаголы HTTP. Семантика HTTP-глаголов выражается не только в том, какой вам будет возвращен ответ, а еще и в том, как можно с ним работать. Глагол<em>GET</em>считается идемпотентным. Это означает, что его повторное выполнение всегда возвращает один и тот же результат, т.е. это обычный запрос. Мы спрашиваем систему о чем-то, она возвращает нам данные и при этом не изменяет своего внутреннего состояния. Таким образом любой повторный запрос отработает точно так же - детерминировано. В качестве аналогии можно привести чистую функцию. В реальности состояние системы конечно же может поменяться и мы не можем это контролировать, поэтому кэширование не является тривиальной задачей.</p>
6
<p><em>POST</em>-запрос, напротив, не является идемпотентным и предназначен для изменения данных. Таким образом повторный запрос может приводить к другим результатам. Если первым<em>POST</em>-запросом мы удаляем данные, то вторым получим ошибку<em>404</em>. Такие запросы никогда не кешируются.</p>
6
<p><em>POST</em>-запрос, напротив, не является идемпотентным и предназначен для изменения данных. Таким образом повторный запрос может приводить к другим результатам. Если первым<em>POST</em>-запросом мы удаляем данные, то вторым получим ошибку<em>404</em>. Такие запросы никогда не кешируются.</p>
7
<p>Поисковые роботы ходят по сайтам только по<em>GET</em>-ссылкам, так как они учитывают семантику и знают, что<em>GET</em>-запросы можно делать безболезненно и с сайтом ничего страшного не произойдет.</p>
7
<p>Поисковые роботы ходят по сайтам только по<em>GET</em>-ссылкам, так как они учитывают семантику и знают, что<em>GET</em>-запросы можно делать безболезненно и с сайтом ничего страшного не произойдет.</p>
8
-
<p>Параметры<em>query string</em>в<em>GET</em>-запросах используются при работе с формами, которые бывают как минимум двух типов: на изменение, создание или добавление данных и на их выборку. Именно при разработке второго типа форм и используется<em>query string</em>. Это может быть какая-то фильтрация или поисковая форма. Если мы в поисковике наберем запрос, например, какое-то слово и нажмем кнопку<em>Поиск</em>, то увидим, что нас отправит на страницу, в URL которой будет отправлен<em>query string</em>. Это очень важный момент, так как именно благодаря этому мы не производим никаких изменений и можем дать ссылку на этот запрос. Очень важно придерживаться семантики глаголов. Например, в некоторых старых банковских системах запросы почему-то реализовывались через<em>POST</em>. При таком подходе нельзя не только дать ссылку на запрос, но даже простое обновление страницы с помощью F5 приводит к повторной отправке данных.</p>
8
+
<p>Параметры<em>query string</em>в<em>GET</em>-запросах используются при работе с формами, которые бывают как минимум двух типов: для изменения, создания или добавления данных и для их выборки. Именно при разработке второго типа форм и используется<em>query string</em>. Это может быть какая-то фильтрация или поисковая форма. Если мы в поисковике наберем запрос, например, какое-то слово и нажмем кнопку<em>Поиск</em>, то увидим, что нас отправит на страницу, в URL которой будет отправлен<em>query string</em>. Это очень важный момент, так как именно благодаря этому мы не производим никаких изменений и можем дать ссылку на этот запрос. Очень важно придерживаться семантики глаголов. Например, в некоторых старых банковских системах запросы почему-то реализовывались через<em>POST</em>. При таком подходе нельзя не только дать ссылку на запрос, но даже простое обновление страницы с помощью F5 приводит к повторной отправке данных.</p>