Книга: Выразительный JavaScript
Браузер и HTTP
Браузер и HTTP
Как мы видели в примере, браузер отправляет запрос, когда мы вводим URL в адресную строку. Когда в полученном HTML документе содержатся упоминания других файлов, такие, как картинки или файлы JavaScript, они тоже запрашиваются с сервера.
Веб-сайт средней руки легко может содержать от 10 до 200 ресурсов. Чтобы иметь возможность запросить их побыстрее, браузеры делают несколько запросов одновременно, а не ждут окончания запросов одного за другим. Такие документы всегда запрашиваются через запросы GET
.
На страницах HTML могут быть формы, которые позволяют пользователям вписывать информацию и отправлять её на сервер. Вот пример формы:
<form method="GET" action="example/message.html">
<p>Имя: <input type="text" name="name"></p>
<p>Сообщение:<br><textarea name="message"></textarea></p>
<p><button type="submit">Отправить </button></p>
</form>
Код описывает форму с двумя полями: маленькое запрашивает имя, а большое – сообщение. При нажатии кнопки «Отправить» информация из этих полей будет закодирована в строку запроса (query string). Когда атрибут method
элемента равен GET
, или когда он вообще не указан, строка запроса помещается в URL из поля action
, и браузер делает GET
-запрос с этим URL.
GET /example/message.html?name=Jean&message=Yes%3F HTTP/1.1
Начало строки запроса обозначено знаком вопроса. После этого идут пары имён и значений, соответствующие атрибуту name
полей формы и содержимому этих полей. Амперсанд (&
) используется для их разделения.
Сообщение, отправляемое в примере, содержит строку “Yes?”, хотя знак вопроса и заменён каким-то странным кодом. Некоторые символы в строке запроса нужно экранировать (escape). Знак вопроса в том числе, и он представляется кодом %3F
. Есть какое-то неписаное правило, по которому у каждого формата должен быть способ экранировать символы. Это правило под названием кодирование URL использует процент, за которым идут две шестнадцатеричные цифры, которые представляют код символа. 3F в десятичной системе будет 63, и это код знака вопроса. У JavaScript есть функции encodeURIComponent
и decodeURIComponent
для кодирования и раскодирования.
console.log(encodeURIComponent("Hello & goodbye"));
// ? Hello%20%26%20goodbye
console.log(decodeURIComponent("Hello%20%26%20goodbye"));
// ? Hello & goodbye
Если мы поменяем атрибут method
в форме в предыдущем примере на POST
, запрос HTTP с отправкой формы пройдёт при помощи метода POST
, который отправит строку запроса в теле запроса, вместо добавления её к URL.
POST /example/message.html HTTP/1.1
Content-length: 24
Content-type: application/x-www-form-urlencoded
name=Jean&message=Yes%3F
По соглашению метод GET
используется для запросов, не имеющих побочных эффектов, таких, как поиск. Запросы, которые что-то меняют на сервере – создают новый аккаунт или размещают сообщение, должны отправляться методом POST
. Клиентские программы типа браузера знают, что просто так делать запросы формата POST
не нужно, и иногда незаметно для пользователя делают запросы GET
– к примеру, чтобы загрузить заранее контент, который может вскоре понадобиться пользователю.
В следующей главе мы вернёмся к формам и поговорим про то, как мы можем делать их при помощи JavaScript.
- Получение статистики браузера
- 17. HTTP
- 19.3 Браузеры WWW
- 19.7 Архитектура HTTP
- XMLHttpRequest
- Кроссбраузерность вашего сайта
- Неудобно читать текст в браузере – слишком мелкие буквы. Можно ли их увеличить?
- Я слышал, что компьютером можно управлять «жестами», как в браузере Opera. Как это реализовать?
- 9.3.1. HTTP-директивы
- 9.6. Кэширование браузером
- 2.4.6. Настройка браузера Opera
- Editing httpd.conf