Мы видели в нескольких местах, как ASP создает или изменяет заголовки HTTP, которые отправляются клиенту в ответ на запросы страниц. В объекте Response есть несколько свойств и методов, которые могут помочь нам в этом. Вот некоторые методы заголовка:
· Управление кэшированием и сроком действия.
· Создание статуса и настраиваемых заголовков HTTP.
· Укажите тип MIME или тип контента.
· Добавить теги PICS.
Далее каждый из этих аспектов будет кратко рассмотрен. Вы можете проверить свойства и методы, о которых мы говорим, щелкнув соответствующее имя свойства или имя метода на домашней странице «Объект ответа» (show_response.asp).
1. Кэширование и срок действия веб-страниц ASP.
Браузеры пользователей, а также любой прокси-сервер между ними и сервером могут кэшировать HTML и веб-страницы, созданные с помощью ASP. Когда пользователь впоследствии запрашивает страницу, браузер отправляет на сервер запрос «последнее изменение» (используя заголовок HTTP_IF_MODIFIED_SINCE, содержащий дату кэшированной версии), чтобы узнать, была ли страница изменена.
Если он не был изменен, сервер должен ответить кодом состояния и сообщением «304 Not Modified», и браузер будет использовать кэшированный контент без загрузки копии по сети. Если измененная версия уже существует, она будет отправлена вместе с кодом состояния «200 ОК» и сообщением.
1) Атрибут Response.CacheContol.
На процесс обработки также влияют и другие факторы. Однако любому прокси-серверу в сетевом маршруте, используемому веб-страницей (обычно расположенному на стороне клиента), можно запретить кэширование веб-страницы, установив для свойства Response.CacheControl значение Private. В ASP 3.0 это значение по умолчанию для веб-страниц ASP, и его не нужно задавать. Но это особенно полезно, когда веб-страница специально настроена для отдельных посетителей. Это предотвращает доступ других пользователей в той же сети к той же странице. Если для атрибута CacheControl установлено значение Public, серверу разрешено кэшировать веб-страницы. Обратите внимание, что некоторые прокси-серверы могут вести себя по-другому и игнорировать или обходить этот заголовок.
В IE4 можно получить ложное сообщение «Срок действия этой страницы истек», когда доступно кэширование прокси-сервера. Мы предоставили веб-страницу (expiretest_form.asp), которую можно протестировать в сети через собственный прокси-сервер, чтобы проверить влияние этого атрибута. Эту страницу можно отобразить, щелкнув ссылку «Response. CacheControl» на домашней странице «Объект ответа». Как показано на рисунке ниже:
Когда эта страница отправляется на веб-страницу expiretest_result.asp, можно установить свойство Response.CacheControl, а затем на веб-страницу вставляются значение и время выполнения сценария:
<%
Если Request.Form("public") = "on" Тогда установлен флажок "Cache-Control"
Response.CacheControl = "Общедоступный"
Еще
Response.CacheControl = "Частный"
Конец, если
%>
<HTML>
...
Cache-Control: <B><% = Response.CacheControl %></B><P>
Значение в текстовом поле: <B><% Response.Write Request.Form(“textbox”) %>
<%
Response.Write Right("0" & Hour(Now),2) & ":" & Right("0" & Minute(Now),_
& 2) & «:» & Вправо («0» & Второй (сейчас), 2)
%></B>
Нажимая «Назад» и «Вперед» в браузере, вы можете увидеть, выполняется ли код автоматически или используется кэшированная копия.
2) Свойства Response.Expires и Response.ExpiresAbsolute
Двумя свойствами, управляющими временем хранения кэшированных веб-страниц, являются свойства Expires и ExpriesAbsolute объекта Response. Response.Expires определяет период времени, выраженный в минутах с момента создания, в течение которого страница должна оставаться действительной, прежде чем будет удалена из кэша. Атрибут ExpiresAbsolute устанавливает абсолютную дату и время истечения срока действия.
Мы предоставляем образец веб-страницы с именем addheaders_form.asp, чтобы продемонстрировать, как использовать эти атрибуты. Щелкните ссылку для обоих свойств на домашней странице объекта ответа.
На полученной странице вы можете добавить свои собственные настраиваемые заголовки HTTP и установить различные атрибуты заголовков HTTP, влияющие на ответ. При нажатии кнопки «Отправить содержимое запроса» страница show_headers.asp добавляет выбранные заголовки в возвращаемый поток данных, а затем отображает код, используемый для этого, отображая соответствующее время выполнения, которое можно использовать для проверки того, является ли страница было Кэш все еще выполняется снова.
Код на веб-странице show_headers.asp создает и добавляет заголовки HTTP. Процедура выглядит следующим образом:
<%.
'Запись заголовков HTTP перед любым другим выводом
Если Request.Form("expires") = "on" Тогда _
Response.Expires = Request.Form("expires_value")
Если Request.Form("expiresabs") = "on" Тогда _
Response.ExpiresAbsolute = Request.Form("expiresabs_value")
Если Request.Form("lastmod") = "on" Тогда _
Response.AddHeader «LAST-MODIFIED», Cstr(Request.Form(»lastmod_value»))
Если Request.Form("pragma") = "on" Тогда _
Response.AddHeader «PRAGMA», CStr(Request.Form («pragma_value»))
Если Request.Form("refresh") = "on" Тогда _
Response.AddHeader «ОБНОВИТЬ», CStr(Request.Form(»refresh_value»))
Если Request.Form("addheader") = "on" And Len(Request.Form("addheader_name")) Тогда _
Response.AddHeader CStr(Request.Form("addheader_name")), _
CStr(Request.Form("addheader_value"))
Если Request.Form("status") = "on" Тогда _
Ответ.Статус = Запрос.Форма("значение_статуса")
%>
<HTML>
...
...Показать код и время выполнения
...
остальное просто показывает код, который был выполнен, и когда он был выполнен. Читатели заметят специальный заголовок «PRAGMA», включенный в веб-страницу (который мы еще не обсуждали). Некоторые (бывшие) прокси-серверы используют это как показатель того, следует ли кэшировать веб-диски. По умолчанию страницы кэшируются, если не получен HTTP-заголовок «PRAGMA=NO-CACHE».
2. Создайте коды состояния и настраиваемые заголовки HTTP.
Вы можете использовать метод AddHeader объекта Response, который вы видели ранее на примере веб-страницы, для создания собственных кодов состояния или настраиваемых заголовков, которые вам нравятся. Для этого метода требуются два параметра: имя HTTP-заголовка или строка, содержащая его значение или присвоенное ему значение. Например, следующий код добавляет на страницу заголовок REFRESH:
Response.AddHeader «REFRESH», «60;URL=newpath/newpage.asp».
Это эквивалентно элементу <META> на стороне клиента:
<META HTTP- EQUIV=" REFRESH", "60;URL=newpath/newpage.asp">
Другими словами, вы также можете использовать метод AddHeader с атрибутом Status, чтобы заставить браузер загрузить новую страницу:
Response.Status = "302 Object Moved "
Response.Addheader «Location», «newpath/newpage.asp»
Это эквивалентно использованию метода Response.Redirect:
Response.Redirect «newpath/newpage.asp»
Свойство Response.Status можно использовать для отправки некоторых необходимых сообщений о состоянии, например, добавьте следующие строки:
Response.Status= «401 Unauthorized»
Response.Addheader «WWW-Authenticate», «BASIC»
заставляет браузер отображать диалоговое окно имени пользователя и пароля, а затем отправлять их обратно на сервер с использованием BASIC-аутентификации (которая будет рассмотрено в этой статье. См. методы проверки далее в этой статье).
3. Тип MIME и тип контента.
Когда мы хотим отправить в браузер динамически созданную строку, и они не указывают напрямую тип контента при предоставлении браузеру, но предоставляют расширение, указывающее, является ли это дисковым файлом, ответ. ContentType очень полезен. Если не указано иное, все веб-страницы, созданные ASP, по умолчанию имеют тип «текст/тип». Идентификатором типа контента является тип MIME (MIME означает «многоцелевое расширение мультимедиа Интернета» или «многоцелевое расширение почты Интернета», обычно в зависимости от контекста).
Например, если аннотация данных, отправленная клиенту, представляет собой изображение, созданное путем чтения двоичных значений из базы данных, вам необходимо добавить соответствующий заголовок CONTENT-TYPE перед отправкой любого контента:
Response.ContentType = «image/jpeg»
If вы создаете изображение из базы данных. Для файлов XML используйте тип MIEM «text/xml», а если вы создаете текстовый файл, который можно отобразить в редакторе файлов или сохранить как файл на диске на клиенте, используйте «текст»; /текст".
4. Добавление тега PICS
Свойство Respnse.Pics просто добавляет тег PICS (платформа для системы интернет-контента) на страницу так же, как обычный тег <META>:
QUOT = Chr(34)
StrPicsLabel = «(PICS-1.0» & QUOT & «http://www.rsac.org/ratingsv01.html»_
& QUOT & «Правдивый комментарий 1 поколения» & QUOT _
& «Сервер RSACi в Северной Америке» & QUOT & « for » & QUOT _
& «http://yoursite.com» & QUOT & « на « & QUOT _
& «1999.08.01T03:04-0500» & QUOT & «r (n 0 s 0 v 2 l 3))»
Response.Pics(strPicsLabel)
Этот код добавляет следующую метку PICS:
(PICS-1.0 «http://www.rsac.org/ratingsv01.html» 1 поколение true comment «RSACi
Сервер Северной Америки» для «http://yoursite.com» на «1999.08.01T03:04-0500»
r (n 0 s 0 v 2 l 3))
Чтобы получить дополнительную информацию о PICS или узнать больше о способе определения содержимого страницы, выполните поиск на сайте http://www.rsac.org/ .
Определение заголовков в диспетчере служб Интернета
. В первой части этой серии статей было объяснено, как установить свойства каждого веб-сайта и каталога IIS 5.0 в приложении управления службами Интернета (подключаемый модуль MMC), которое определяет использование ресурсов этого сайта или каталога отправляются клиенту в HTTP-заголовках всех запросов, предоставляя альтернативу настройке этих свойств с помощью кода сценария ASP на каждой веб-странице.
Щелкните правой кнопкой мыши веб-сайт или каталог и выберите «Свойства». На вкладке «HTTP-заголовки» диалогового окна вы можете установить относительное время или абсолютную дату для периода действия содержимого страницы, определить настраиваемые заголовки и создавать метки уровня контента PICS, типы контента также можно определить с помощью сопоставления типов MIME.
Вы можете видеть, что специальный HTTP-заголовок REFRESH был создан и применен ко всем веб-страницам, загруженным из этого каталога. То есть он автоматически перезагружается (обновляется) каждую минуту (идеально для показа последних результатов бейсбольных матчей, но слишком большая нагрузка на сервер).
Чтобы добавить пользовательские сопоставления типов контента в поле «Карта MIME», просто нажмите кнопку «Типы файлов» в главном диалоговом окне «Свойства», чтобы добавить их в список.
Когда вы начнете экспериментировать с HTTP-заголовками, вы быстро обнаружите, что не все браузеры ведут себя одинаково, и многие браузеры по-разному реагируют на разные HTTP-заголовки, что иногда делает чрезвычайно трудным надежно установить общеприменимый принцип.
2. Используйте сертификаты клиентов.
Если вы создали защищенный веб-сайт или сайт с защищенной частью содержимого, вы можете установить цифровой сертификат сервера для аутентификации сервера, позволяя посетителям использовать зашифрованные данные в сертификате. При каждом запросе страницы на сайт или каталог сервер отправляет копию сертификата, который браузер может проверить, чтобы определить, с кем он разговаривает.
Аналогично, сервер также можно настроить так, чтобы пользователи требовали предоставления действующего цифрового сертификата при входе на веб-сайт. Они могут получить этот сертификат из многих источников, таких как Verisign ( http://www.verisign.com ) или Thawte Consulting ( http://www.thawte.com ). Подробности этого процесса читатель увидит в главе 25.
Во всех этих ситуациях используются значения коллекции ClientCertificate объекта Request. Пример кода в этой главе включает страницу, на которой показано, как пользователи используют некоторые методы этих значений коллекции.
Эта страница называется showcert.asp, и все, что она делает, — это перебирает коллекцию ClientCertificate и отображает все содержащиеся в ней значения. Это можно сделать, используя тот же простой код, который вы всегда использовали раньше, с той лишь разницей, что нужно создать HTML-таблицу для хранения результатов и усечь их на группы по 60 символов.
<TABEL CELLPADDING=0 CELLSPACING=0>
<%
Для каждого ключевого элемента в Request.ClientCertificate()
StrItemValue = Request.ClientCertificate(keyItem)
Если Len(strItemValue) > 90, то strItemValue = Left(strItemValue, 60) & «..etc.»
Ответ. Напишите «<TR><TD>» & keyItem & « = » & strItemValue & «</TD></TR>»
Следующий
%>
</TABLE>
Использование перенаправления клиентских сертификатов
После того, как всех посетителей сайта или части сайта попросят предоставить сертификат клиента, содержащаяся в нем информация может быть использована для создания веб-страниц, которые мы создаем для этого пользователя. Например, вы можете использовать запись «Организация» в их сертификате, чтобы автоматически перенаправлять их в определенную часть сайта и перенаправлять других посетителей в другое место:
If Request.ClientCertificate("SubjectO") = "Wrox Press Inc" Тогда
Response.Redirect "/wrox_staff/default.asp" 'Сайт персонала Wrox
Еще
Response.Redirect "/public/Default.asp" 'Обычный общедоступный сайт
End If
Соответственно, запись Country может использоваться для перенаправления посетителя на соответствующий веб-сайт:
Выберите Case Request.ClientCertificate("SubjectC")
Случай «Великобритания»: Response.Redirect «http://uk_site.co.uk/»
Случай «DE»: Response.Redirect «http://de_site.co.de/»
Случай «FR»: Response.Redirect «http://fr_site.co.fr/»
'... и т. д.
Другой случай: Response.Redirect «http://us_site.com/»
End Select
3. Чтение и запись двоичных данных
Существует два метода, которые обеспечивают доступ к двоичным данным к потоку данных HTTP, отправляемому из браузера на сервер, и к потоку данных, возвращаемому с сервера в браузер. Метод Request.BinaryRead может получить параметр, указывающий количество читаемых байтов, и возвращает массив вариантного типа, содержащий байты, полученные из запрошенного сегмента POST (например, данные в коллекции форм ASP). Следующая программа считывает первые 64 байта данных:
varContent = Request.BinaryRead(64)
Если вы используете метод BinaryRead, вы не сможете получить доступ к коллекции ASP Request.Form в будущем. Аналогично, если мы каким-либо образом ссылаемся на коллекцию Request.Form, мы не можем использовать метод BinaryRead.
Также можно записывать двоичные данные в поток ответов, созданный ASP, с помощью метода BinaryWrite. Вам необходимо предоставить ему вариантный массив байтов, которые вы хотите записать клиенту:
Response.BinaryWrite(varContent)
Эти методы используются редко, если вы не создаете источник, отличный от HTML, из базы данных. Пример использования — прочитать байты, составляющие изображение, из базы данных и отправить его клиенту с помощью метода BinaryWrite.
4. Создайте собственное сообщение журнала.
Если сервер настроен на регистрацию запросов в текстовый файл в расширенном формате файла журнала W3C, вы можете использовать метод Response.AppendToLog, чтобы добавить строку сообщения в конец записи файла журнала. Этот метод очень полезен, если вы хотите сохранить какие-то значения или сообщения для конкретной веб-страницы или когда в скрипте возникает определенная ситуация.
Например, через приложение «стационарного заказа» интрасети можно фиксировать количество сотрудников отдела, превышающее определенное количество записей:
...
Если intItemCount > 25 Тогда
Response.AppendToLog «Крупный заказ от '» & strDept & отдела.»
Конец, если
...
настройка расширенного ведения журнала
Чтобы использовать метод AppendToLog, необходимо активировать параметр ведения журнала W3C Extended Log File Format. Метод настройки заключается в том, чтобы перейти на вкладку «Веб-сайт» в диалоговом окне «Свойства», установить флажок «Включить ведение журнала», выбрать «Расширенный формат файла журнала W3C» и нажать кнопку «Свойства», как показано на следующем рисунке:
В диалоговом окне «Свойства расширенного ведения журнала», появится сообщение: Вы можете выбрать записи, которые хотите включить в файл журнала. Убедитесь, что установлен флажок URI Stem, иначе метод AppendToLog завершится ошибкой.
Мы предоставили простой пример страницы, которая пытается записать запись в файл журнала, который можно открыть по ссылке метода AppendToLog на домашней странице объекта запроса (show_request.asp). Все, что делает эта страница, — это создает простую строку, содержащую текущую дату и время, а затем выполняет метод AppendToLog:
strToAppend = «Страница выполнена» & Now
Response.AppendToLog strToAppend
Резюме
В этой статье началось изучение ASP 3.0, и мы также увидели, как ASP 3.0 работает вместе с Internet Information Server 5.0, обеспечивая простой в использовании и эффективный метод создания динамических веб-страниц и веб-приложений. . Конечно, есть еще некоторые места, которые необходимо изучить. В этой главе только что были изучены два самых основных объекта, встроенных в ASP.
Двумя наиболее основными объектами являются объекты Request и Response, которые позволяют нам получать доступ к значениям и использовать их в рамках сеанса клиент/сервер, который происходит всякий раз, когда пользователь запрашивает и загружает страницу или ресурс с веб-сайта. что объект Request может предоставить доступ ко всему содержимому, запрошенному пользователем, а объект Response позволяет создавать и изменять ответ, отправленный обратно сервером.
Эти объекты предоставляют различные части сеанса через коллекции и свойства и предоставляют множество методов для получения и изменения отдельных сегментов. Если вы думаете о них как об инструментах для разделения запроса пользователя и создания ответа с соответствующим содержанием, это может помочь вам понять, что происходит. Это также поможет понять, как различные методы влияют на клиент, сервер и создаваемую веб-страницу.