|
компьютера
пользо-
Часть I. Основы Web-программирования 64
вателя на сервер. Для этого в языке HTML предусмотрены специальные средства.
Рассмотрим их подробнее.
Формат данных
В свое время я говорил, что все данные из формы при передаче их на сервер
упако-
вываются в строку при помощи символов ?, & и =. Легко видеть, что при загрузке
файлов такой способ, хотя и приемлем, но будет существенно увеличивать размер
передаваемой информации. Действительно, ведь большинство файлов — бинарные, а
мы знаем, что при URL-кодировании данные таких файлов сильно "распухают" —
примерно в три раза (например, простой нулевой байт при URL-кодировании превра-
тится в %00). Это сильно замедлит передачу и увеличит нагрузку на канал. И вот,
от-
части специально для решения указанной проблемы был изобретен другой формат
передачи данных, отличный от того, который мы до сих пор рассматривали.
В нем уже не используются пресловутые символы ? и &. Кроме того, похоже, в
случае
применения такого формата передачи может быть задействован только метод POST,
но не метод GET. Нас это вполне устроит — ведь файлы обычно большие, и достав-
лять их через GET вряд ли разумно...
Если нужно указать браузеру, что в какой-то форме следует применять другой
формат
передачи, следует в соответствующем тэге
Данные, поступившие по нажатии кнопки submit на сервер, будут иметь
следующий вид:
----------------127462537625367\n
Content-Disposition: form-data; name="Name"\n
\n
Мое имя\n
----------------127462537625367\n
Content-Disposition: form-data; name="Box"\n
\n
1\n
----------------127462537625367\n
Content-Disposition: form-data; name="Area"\n
\n
Это какой-то текст\n
Заметьте, что несколько дефисов и число (которое мы ранее назвали
Идентификатор_начала) предшествуют каждому блоку. Более того, строка из дефи-
сов и этого числа служит своеобразным маркером, который разделяет блоки.
Очевид-
но, эта строка должна быть уникальной во всех данных. Именно так ее и формирует
браузер. Правда, сказанное означает, что сегодня идентификатор будет одним, а
зав-
тра, возможно, совсем другим. Так что нам придется, прежде чем анализировать
дан-
ные, считать этот идентификатор в буфер (им будет последовательность символов
до
первого символа \n).
Стандарт протокола HTTP говорит нам, что идентификатор начала также дол-
жен быть доступен через одну из переменных окружения. Но я не помню и не
хочу знать ее название — сейчас объясню, почему. Некоторые браузеры (осо-
бенно старые) путают этот идентификатор и присылают его неправильно — с
двумя предшествующими минусами (а остальные — без них), так что сцена-
рии, не рассчитывающие на такой подвох, перестанут работать. Никогда не
полагайтесь на эту переменную окружения (даже если узнаете, как она назы-
вается)! Вместо этого читайте последовательность символов до первого пере-
вода строки и воспринимайте
|
|