Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Негодное responses html. Описание объекта Response

    Негодное responses html. Описание объекта Response
    Межсайтовые атаки с внедрением сценария

    Во время межсайтовой атаки с внедрением сценария (XSS) атакующая сторона внедряет в легальную Web-страницу вредоносный код, который затем запускает вредоносный сценарий на стороне клиента. При посещении пользователем зараженной страницы сценарий загружается в браузер пользователя и там запускается. Эта схема имеет множество разновидностей. Вредоносный сценарий может получать доступ к cookie-файлам браузера, сеансовым маркерам или другой чувствительной информации, хранящейся в браузере. Тем не менее все атаки действуют по схеме, показанной на рисунке 1.

    Рисунок 1. Рисунок 1. Типичная XSS-атака
    Уязвимости XSS

    В ходе типичной XSS-атаки атакующая сторона находит способ внедрения строки на Web-страницу сервера. Допустим, атакующий внедрил на Web-страницу следующую строку: alert("вы атакованы") . При каждом посещении пользователем этой страницы его браузер загружает этот сценарий и запускает его вместе с остальным содержимым страницы. В данном случае в результате запуска сценария пользователь увидит всплывающее окно с текстом "вы атакованы".

    Последствия XSS

    Если атакующему удалось воспользоваться XSS-уязвимостью Web-приложения, он может внедрить в страницу сценарий, который предоставит доступ к данным учетной записи пользователя. При этом атакующая сторона может выполнять множество вредоносных действий, например:

    • похитить учетную запись;
    • распространить вирусы;
    • получить доступ к истории посещения страниц и содержимому буфера обмена;
    • получить возможность дистанционного управления браузером;
    • просканировать и использовать программно-аппаратные ресурсы и приложения во внутренней сети.
    Предотвращение XSS-атак

    Для предотвращения XSS-атак приложение должно шифровать выходные данные страницы перед передачей их конечному пользователю. При шифровании выходных данных разметка HTML заменяется альтернативными представлениями —объектами . Браузер отображает эти объекты, но не запускает их. Например, преобразуется в .

    В таблице 1 показаны имена объектов для некоторых распространенных символов HTML.

    Таблица 1. Имена объектов для символов HTMLРезультат Описание Имя объекта Номер объекта
    Неразрывный пробел
    < Меньше чем <
    > Больше чем > >
    & Амперсанд & &
    ¢ Цент ¢ ¢
    £ Фунт £ £
    ¥ Йена ¥ ¥
    Евро
    § Параграф § §
    © Авторское право ©
    ® ® ®
    Товарный знак

    Когда браузер встречает объекты, они преобразуются обратно в HTML и распечатываются, но они не запускаются. Например, если атакующий внедрит в переменное поле Web-страницы сервера строку alert("вы атакованы") , то при использовании описанной стратегии сервер возвратит строку alert("вы атакованы") .

    Когда браузер загрузит зашифрованный сценарий, он преобразует его к виду alert("вы атакованы") и отобразит сценарий в составе Web-страницы, но не запустит его.

    Добавление HTML-кода в приложение Java на стороне сервера

    Чтобы код вредоносного сценария не мог выводиться вместе со страницей, ваше приложение должно шифровать все строковые переменные прежде, чем они отобразятся на странице. Шифрование заключается в простом преобразовании каждого символа в соответствующее имя объекта HTML, как показано в коде Java, приведенном в листинге 1.

    Листинг 1. Преобразование символов в имена объектов HTML public class EscapeUtils { public static final HashMap m = new HashMap(); static { m.put(34, """); // < - меньше чем m.put(60, ""); // > - больше чем //Пользователь должен сопоставить все объекты html с соответствующими десятичными значениями. //Соответствие объектов десятичным значениям показано в приведенной ниже таблице } public static String escapeHtml() { String str = "alert(\"abc\")"; try { StringWriter writer = new StringWriter((int) (str.length() * 1.5)); escape(writer, str); System.out.println("encoded string is " + writer.toString()); return writer.toString(); } catch (IOException ioe) { ioe.printStackTrace(); return null; } } public static void escape(Writer writer, String str) throws IOException { int len = str.length(); for (int i = 0; i < len; i++) { char c = str.charAt(i); int ascii = (int) c; String entityName = (String) m.get(ascii); if (entityName == null) { if (c > 0x7F) { writer.write(""); writer.write(Integer.toString(c, 10)); writer.write(";"); } else { writer.write(c); } } else { writer.write(entityName); } } } }

    В коде Java в листинге 1 выполняется кодирование HTML-строки String String "alert(\"abc\")" . Используйте следующую процедуру:

    В результате на выходе появится следующая строка: alert("abc") .

    В таблице 2 показано соответствие объектов HTML их десятичным значениям.

    Таблица 2. Десятичные значения объектов HTMLДесятичное значение Объект Описание
    160 Неразрывный пробел
    60 < Меньше чем
    62 > Больше чем
    38 & Амперсанд
    162 ¢ Цент
    163 £ Фунт
    165 ¥ Йена
    8364 Евро
    167 § Параграф
    169 Авторское право
    174 ® Зарегистрированный товарный знак
    8482 Товарный знак
    Заключение

    Межсайтовое внедрение сценария является одним из самых распространенных способов атаки на компьютер пользователя. Тем не менее вы можете существенно ослабить способность атакующего инфицировать ваше Web-приложение вредоносным кодом. Создавая приложение, внимательно отнеситесь к шифрованию всех выходных значений страницы перед отправкой их в браузер конечного пользователя.

    Генерация ответа из контроллеров

    После того, как контроллер завершил обработку запроса, обычно требуется сгенерировать ответ. Когда мы создаем низкоуровневый контроллер, непосредственно реализуя интерфейс IController, то должны возложить на себя ответственность за каждый аспект обработки запроса, включая генерацию ответа клиенту.

    Например, для отправки HTML-ответа потребуется создать и скомпоновать HTML-данные, после чего отправить их клиенту с использованием метода Response.Write(). Аналогично, чтобы переадресовать браузер пользователя на другой URL, понадобится вызвать метод Response.Redirect() и передать ему необходимый URL. Оба подхода демонстрируются в коде, приведенном в примере ниже, в котором показаны расширения класса BasicController, который мы создали в одной из предыдущих статей с помощью реализации интерфейса IController:

    Using System.Web.Mvc; using System.Web.Routing; namespace ControllersAndActions.Controllers { public class BasicController: IController { public void Execute(RequestContext requestContext) { string controller = (string)requestContext.RouteData.Values["controller"]; string action = (string)requestContext.RouteData.Values["action"]; if (action.ToLower() == "redirect") { requestContext.HttpContext.Response.Redirect("/Derived/Index"); } else { requestContext.HttpContext.Response.Write(string.Format("Контроллер: {0}, Метод действия: {1}", controller, action)); } } } }

    Тот же самый подход можно применять и в случае наследования контроллера от класса Controller. Класс HttpResponseBase, который возвращается при чтении свойства requestContext.HttpContext.Response в методе Execute(), доступен через свойство Controller.Response, как показано в примере ниже, где приведены расширения класса DerivedController, также созданного ранее с помощью наследования от класса Controller:

    Using System; using System.Web; using System.Web.Mvc; namespace ControllersAndActions.Controllers { public class DerivedController: Controller { public ActionResult Index() { // ... } public void ProduceOutput() { if (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index"); else Response.Write("Контроллер: Derived, Метод действия: ProduceOutput"); } } }

    Метод ProduceOutput() использует значение свойства Server.MachineName для принятия решения о том, какой ответ отправлять клиенту. ("ProfessorWeb" - это имя моей машины разработки.)

    Хотя такой подход генерации ответа пользователю работает, с ним связано несколько проблем:

      Классы контроллеров должны содержать сведения о структуре HTML или URL, что усложняет чтение и сопровождение классов.

      Контроллер, который генерирует ответ напрямую в вывод, трудно поддается модульному тестированию. Понадобится создать имитированные реализации объекта Response и затем иметь возможность обрабатывать вывод, получаемый из контроллера, для определения, что он собой представляет. Это может означать, например, необходимость в реализации разбора HTML-разметки на ключевые слова, что является долгим и утомительным процессом.

      Такая обработка мелких деталей каждого ответа, сложна и чревата ошибками. Некоторым программистам нравится абсолютный контроль, обеспечиваемый построением низкоуровневого контроллера, но обычно это очень быстро обрастает сложностями.

    К счастью, в MVC Framework имеется удобное средство, которое решает все упомянутые проблемы - результаты действий. В последующих разделах приведены объяснения концепции результатов действий и показаны различные способы ее применения для генерации ответов из контроллеров.

    Результаты действий

    Результаты действий в MVC Framework используются для отделения заявлений о намерениях от выполнения намерений (извиняюсь за тавтологию). Концепция покажется простой после того, как вы освоитесь с ней, но она требует определенного времени на понимание из-за некоторой доли косвенности.

    Вместо того чтобы иметь дело напрямую с объектом Response, методы действий возвращают объект класса, производного от ActionResult , который описывает, каким должен быть ответ из контроллера - например, визуализация представления либо перенаправление на другой URL или метод действия. Однако (это и есть та самая косвенность) ответ напрямую не генерируется. Взамен создается объект ActionResult, который MVC Framework обрабатывает для получения результата после того, как был вызван метод действия.

    Система результатов действий является примером шаблона проектирования Command (Команда) . Этот шаблон представляет сценарии, в рамках которых вы сохраняете и передаете объекты, описывающие выполняемые операции.

    Когда инфраструктура MVC Framework получает объект ActionResult от метода действия, она вызывает метод ExecuteResult() , определенный в классе этого объекта. Реализация результатов действий затем работает с объектом Response, генерируя вывод, который соответствует вашему намерению. Чтобы продемонстрировать это в работе, создадим папку Infrastructure и добавим в нее новый файл класса по имени CustomRedirectResult.cs со специальной реализацией ActionResult, показанной в примере ниже:

    Using System.Web.Mvc; namespace ControllersAndActions.Infrastructure { public class CustomRedirectResult: ActionResult { public string Url { get; set; } public override void ExecuteResult(ControllerContext context) { string fullUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext); context.HttpContext.Response.Redirect(fullUrl); } } }

    Этот класс основан на манере работы класса System.Web.Mvc.RedirectResult. Одно из преимуществ открытого кода MVC Framework связано с возможностью исследовать внутреннюю работу чего угодно. Класс CustomRedirectResult намного проще своего эквивалента в MVC, но его вполне достаточно для целей этой статьи.

    При создании экземпляра класса RedirectResult мы передаем URL, на который должен быть перенаправлен пользователь. Метод ExecuteResult(), который будет выполнен инфраструктурой MVC Framework по завершении метода действия, получает объект Response для запроса через объект ControllerContext, предоставляемый инфраструктурой, и вызывает либо метод RedirectPermanent(), либо метод Redirect() (это в точности отражает то, что делалось внутри низкоуровневой реализации IController в примере ранее в статье).

    Использование класса CustomRedirectResult проиллюстрировано в примере ниже, в котором представлены изменения, которые внесены в контроллер Derived:

    // ... using ControllersAndActions.Infrastructure; namespace ControllersAndActions.Controllers { public class DerivedController: Controller { public ActionResult Index() { // ... } public ActionResult ProduceOutput() { if (Server.MachineName == "MyMachineName") return new CustomRedirectResult { Url = "/Basic/Index" }; else { Response.Write("Контроллер: Derived, Метод действия: ProduceOutput"); return null; } } } }

    Обратите внимание, что мы были вынуждены изменить результат метода действия для возвращения ActionResult. Мы возвращаем null, если не хотим, чтобы инфраструктура MVC Framework предпринимала что-либо, когда наш метод действия был выполнен, что и делалось в случае невозвращения экземпляра CustomRedirectResult.

    Модульное тестирование контроллеров и действий

    Многие части MVC Framework спроектированы так, чтобы упростить проведение модульного тестирования, и это особенно справедливо в отношении действий и контроллеров. Для такой поддержки существует несколько причин:

    Тестировать действия и контроллеры можно за пределами веб-сервера. Доступ к объектам контекста осуществляется через их базовые классы (такие как HttpRequestBase), что легко поддается имитации.

    Для тестирования результатов метода действия проводить разбор HTML-разметки не понадобится. Чтобы удостовериться в получении ожидаемых результатов, можно проинспектировать возвращаемый объект ActionResult.

    Эмуляция клиентских запросов не нужна. Система привязки моделей MVC Framework позволяет писать методы действий, которые получают входные данные в своих параметрах. Для тестирования метода действия необходимо просто вызвать его напрямую и предоставить соответствующие значения параметров.

    В следующих статьях, посвященных генерации данных из контроллеров, будет показано, как создавать модульные тесты для разных видов результатов действий.

    Не забывайте, что модульное тестирование - это только часть общей картины. Сложное поведение в приложении возникает, когда методы действий вызываются последовательно. Модульное тестирование лучше всего сочетается с другими подходами к тестированию.

    Теперь, когда известно, каким образом работает специальный результат действия по перенаправлению, можно переключиться на его эквивалент, предлагаемый MVC framework, который обладает большими возможностями и тщательно протестирован в Microsoft. Необходимое изменение контроллера Derived приведено ниже:

    // ... public ActionResult ProduceOutput() { return new RedirectResult("/Basic/Index"); } // ...

    Из метода действия был удален условный оператор, а это означает, что после запуска приложения и перехода на URL вида /Derived/ProduceOutput браузер будет перенаправлен на URL вида /Basic/Index. Чтобы упростить код метода действия, класс Controller включает удобные методы для генерации различных видов объектов ActionResult. Таким образом, к примеру, мы можем получить тот же эффект, что и в примере выше, возвратив результат метода Redirect():

    // ... public ActionResult ProduceOutput() { return Redirect("/Basic/Index"); } // ...

    В системе результатов действий нет ничего особо сложного, но в конечном итоге она помогает получить более простой, чистый и согласованный код, который является легким в чтении и проведении модульного тестирования. Например, в случае с перенаправлением можно просто проверить, что метод действия возвращает экземпляр RedirectResult, свойство Url которого содержит ожидаемую цель.

    В инфраструктуре MVC Framework определено множество встроенных типов результатов действий, которые описаны в таблице ниже:

    Встроенные типы ActionResult Тип Описание Вспомогательные методы класса Controller
    ViewResult

    Визуализирует указанный или стандартный шаблон представления

    View()
    PartialViewResult

    Визуализирует указанный или стандартный шаблон частичного представления

    PartialView()
    RedirectToRouteResult

    Выдает перенаправление HTTP 301 или 302 на метод действия или указанную запись маршрута, генерируя URL согласно конфигурации маршрутизации

    RedirectToAction()
    RedirectToActionPermanent()
    RedirectToRoute()
    RedirectToRoutePermanent()
    RedirectResult

    Выдает перенаправление HTTP 301 или 302 на заданный URL

    Redirect()
    RedirectPermanent()
    ContentResult

    Возвращает браузеру неформатированные текстовые данные, дополнительно устанавливая заголовок content-type

    Content()
    FileResult

    Передает двоичные данные (такие как файл на диске или байтовый массив в памяти) напрямую в браузер

    File()
    JsonResult

    Сериализирует объект.NET в формат JSON и отправляет его в качестве ответа. Ответы подобного вида более часто генерируются при использовании средств Web API и AJAX

    Json()
    JavaScriptResult

    Отправляет фрагмент исходного кода JavaScript, который должен быть выполнен браузером

    JavaScript()
    HttpUnauthorizedResult

    Устанавливает код состояния ответа HTTP в 401 (означает "не авторизован"), который заставляет действующий механизм аутентификации (аутентификация с помощью форм или аутентификация Windows) предложить посетителю войти

    Нет
    HttpNotFoundResult

    Возвращает ошибку HTTP с кодом 404 - Not found (не найдено)

    HttpNotFound()
    HttpStatusCodeResult

    Возвращает указанный код HTTP

    Нет
    EmptyResult

    Ничего не делает

    Нет

    Все эти типы являются производными от класса ActionResult, и многие из них имеют удобные вспомогательные методы в классе Controller. Мы продемонстрируем использование этих типов результатов в последующих статьях.

    After receiving and interpreting a request message, a server responds with an HTTP response message:

    • A Status-line
    • Zero or more header (General|Response|Entity) fields followed by CRLF
    • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
    • Optionally a message-body
    • The following sections explain each of the entities used in an HTTP response message.

      Message Status-Line

      A Status-Line consists of the protocol version followed by a numeric status code and its associated textual phrase. The elements are separated by space SP characters.

    Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF HTTP Version

    A server supporting HTTP version 1.1 will return the following version information:

    HTTP-Version = HTTP/1.1

    Status Code

    The Status-Code element is a 3-digit integer where first digit of the Status-Code defines the class of response and the last two digits do not have any categorization role. There are 5 values for the first digit:

    S.N. Code and Description
    1 1xx: Informational

    It means the request was received and the process is continuing.

    2 2xx: Success

    It means the action was successfully received, understood, and accepted.

    3 3xx: Redirection

    It means further action must be taken in order to complete the request.

    4 4xx: Client Error

    It means the request contains incorrect syntax or cannot be fulfilled.

    5 5xx: Server Error

    It means the server failed to fulfill an apparently valid request.

    HTTP status codes are extensible and HTTP applications are not required to understand the meaning of all registered status codes. A list of all the status codes has been given in a separate chapter for your reference.

    Response Header Fields

    We will study General-header and Entity-header in a separate chapter when we will learn HTTP header fields. For now, let"s check what Response header fields are.

    The response-header fields allow the server to pass additional information about the response which cannot be placed in the Status- Line. These header fields give information about the server and about further access to the resource identified by the Request-URI.

    • Proxy-Authenticate

    • WWW-Authenticate

    You can introduce your custom fields in case you are going to write your own custom Web Client and Server.

    Examples of Response Message

    Now let"s put it all together to form an HTTP response for a request to fetch the hello.htm page from the web server running on сайт

    HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed Hello, World!

    The following example shows an HTTP response message displaying error condition when the web server could not find the requested page:

    HTTP/1.1 404 Not Found Date: Sun, 18 Oct 2012 10:36:20 GMT Server: Apache/2.2.14 (Win32) Content-Length: 230 Connection: Closed Content-Type: text/html; charset=iso-8859-1 404 Not Found Not Found

    The requested URL /t.html was not found on this server.

    Following is an example of HTTP response message showing error condition when the web server encountered a wrong HTTP version in the given HTTP request:

    HTTP/1.1 400 Bad Request Date: Sun, 18 Oct 2012 10:36:20 GMT Server: Apache/2.2.14 (Win32) Content-Length: 230 Content-Type: text/html; charset=iso-8859-1 Connection: Closed 400 Bad Request Bad Request

    Your browser sent a request that this server could not understand.

    The request line contained invalid characters following the protocol string.

    This article gives a summary of the responses that an organisation or project can take to manage a risk. Risk can be defined as uncertainty of outcome whether positive (an opportunity) or negative (a threat). The managment of risk is critical to project success and it is the task of risk management to manage a project’s exposure to risk ().

    The response(s) to a given risk should reflect the risk type, the risk assessment (likelihood, impact, criticality) and the organisation’s attitude to risk. There are a number of possible responses to risks and as risks can be threats or opportunities these include responses that are suitable for potential opportunities . The responses are summarised in the table below.

    Table of risk responses
    Risk Response Description/example

    Suitable for…. risk types (these are suggestions and not exhaustive)

    Threats
    Avoid

    The risk is avoided by changing the project in someway to bypass the risk.

    Some political risks e.g. adverse public opinion. Some technical/operational/infrastructure risks e.g. maintenance problems. Legal and regulatory risks e.g. regulatory controls, licensing requirements.

    Transfer

    Some strategic/commercial risks e.g. theft, insolvency can be insured against. See business risks for more examples.

    Reduce

    Action is taken to reduce either the likelihood of the risk occurring or the impact that it will have.

    The most frequently used response to risk.

    Widely applicable - Technical/Operational/Infrastructure e.g. negligence, performance failure, scope ‘creep’, unclear expectations.

    Organisational/management/human factors e.g. personality clashes, poor leadership, and poor staff selection.

    Some political, legal and regulatory, and economic/financial risks may need to be accepted with a in place e.g. war and disorder, exchange rate fluctuation.

    Contingency Here a plan is put in place to respond if the risk is realised.

    Economic/financial/market
    Political
    Legal and regulatory

    Arguably all risks can and should have a contingency plan in place.

    Opportunities
    Share An opportunity is shared with a partner or supplier to maximise the benefits through use of shared resource/technology etc. Technical/operational/infrastructure e.g. new technology, improved designs.
    Exploit A project could be adjusted to take advantage of a change in technology or a new market. Economic/financial/market e.g. new and emerging markets, positive changes in exchange rates or interest rates.
    Enhance Action is taken to increase the likelihood of the opportunity occurring or the positive impact it could have. Strategic/commercial opportunities such as new partnerships, new capital investment, new promoters.
    Reject Here no action is taken and the chance to gain from the opportunity is rejected. may be put in place should the opportunity occur. Political or environmental e.g. new transport links, change of government bringing positive changes in policy/opportunities for lobbying etc.

    Contingency plans should identify the actions that will be taken if a risk occurs. Contingent actions will often have an associated cost and a budget should be set aside in the business case to cover this. The Top 50 Business Risks and how to manage them! 20 Common Project Risks - example Risk Register Checklist of 30 Construction Risks Risk Responses - referencesOffice of Government Commerce (2002), Managing Successful Projects with PRINCE2, London: TSO.

    The Projects Group PLC, 2006, Risk Management Overview, Sutton: The Projects Group plc.

    Описываемый объект является очень полезным и мощным инструментом. Данный объект имеет несколько методов, их описание приводится ниже:

    Коллекции: Методы: Свойства: Коллекция Response.Cookies

    Коллекция Cookies устанавливает значения для cookies. Если указанные cookies не существуют, то создает их. Если cookie существует, то принимает новое значение, а старое уничтожается.

    Response.Cookies(cookie) [(ключ) | . аттрибуты ] = значение

    Параметры:

    • cookie - Имя cookie
    • ключ - Необязательный параметр. Если он указан, то cookie - это справочник (вложенный) и ключ - это множество значений.
    • аттрибуты - Указанная информация о самих cookie. Данный параметр может быть один из следующих:
    • значение - Указывает значение, которое необходимо присвоить данному ключу или атрибуту.
    Название Описание
    Domain Только запись. Если указан, то cookie передаются только по запросу из этого домена.
    Expires Только запись. Дата, когда у cookie истекает срок действия. Эта дата должна быть установлена для того, чтобы cookie записались на клиентский жесткий диск после окончания сессии. Если этот атрибут не установлен, то дата окончания срока действия cookie принимается текущей датой. Cookie прекратят срок действия сразу же по окончании сессии.
    HasKey Только чтение. Указывает на то, содержит ли cookie данный ключ.
    Path Только запись. Если указан, то cookie передаются только по запросу с этого пути. Если параметр не установлен, то используется путь к приложению.
    Secure Только запись. Указывает на то, защищены ли будут cookie или нет.

    Замечание:

    Если cookie с ключем созданы так, как показано в следующем скрипте,

    то следующий заголовок будет послан:

    Set-Cookie:MYCOOKIE=TYPE1=сахар&TYPE2=печенье

    Если же присвоить mycookie значение без использования ключей, то это действие разрушит type1 и type2 - ключи. К примеру:

    В предыдущем примере ключи type1 и type2 будут разрушены и их значения потерены. Mycookie будет теперь содержать в себе значение шоколадный зефир.

    Вы также можете проверить существование конкретного ключа следующим способом:

    Если будет выведено TRUE, значить такой ключ существует, в случае FALSE - нет.

    Метод Response.Write

    Response.Write переменная_или_значение

    Параметры:

    • переменная_или_значение - Данные для вывода на экран браузера через HTML. Этот параметр может быть любого типа, поддерживаемого VisualBasic Scripting Edition. То есть данные могут быть типов: дата, строка, символ, числовые значения. Значение данного параметра не может содержать комбинации %>. Вместо нее можно использовать равнозначную комбинацию %\>. Web-сервер будет преобразовывать эту последовательность в требуемую, когда скрипт будет выполнен.

    Следующий пример показывает как работает метод Response.write для вывода сообщения клиенту.

    Я просто скажу вам: А ваше имя

    Следующий пример добавляет HTML-таг на web-страничку. Так как данный метод не может содержать комбинацию %>, то мы используем последовательность %\>. Итак пример скрипта:

    Результатом вывода будет строка:

    Метод Response.Redirect

    Response.Redirect URL (URL - универсальный описатель ресурсов)

    Параметры:

    • URL - Параметр является универсальным описателем ресурса. Он показывает, када необходимо переадресовать браузер.

    Замечание:

    Любое вхождение данного метода между тагами и web-страницы будет проигнорирован. Данный метод может использоваться только в заголовке HTML-страницы. Данный метод передаст заголовок (header) браузеру, если пропущен параметр URL данного объекта в следующем виде:

    HTTP/1.0 302 Object Moved Location URL

    Метод Response.End

    Response.End

    Замечание:

    Если свойство Response.Buffer был установлен в TRUE (истина), то вызывая метод Response.End будет производить очистку буфера, выталкивая данные из него клиенту. Если вы не хотите выводить данные пользователю, вы должны вызвать следующий метод:

    Метод Response.AddHeader

    Метод AddHeader добавляет HTML-заголовок с определенными значениями. Этот метод всегда добавляет новый заголовок к ответу клиентскому браузеру. Данный метод не заменяет существующий заголовок новым. Добавленный заголовок не может быть удален.

    Данный метод применяется только для "продвинутых" задач.

    Response.AddHeader имя_переменной, значение

    Параметры:

    • имя_переменной - Название нового параметры HTML-заголовка.
    • значение - Устанавливаемое значение, которое будет запомнено в заголовке.
    Замечания:

    Для корректной работы метода, имя_переменной не должно содержать символа подчеркивания (_). Набор ServerVariables интерпретирует символ подчеркивания как тире в заголовке. Для примера следующий скрипт принуждает сервер найти параметр из HTML-заголовака, называющийся MY-HEADER.

    Так как HTTP протокол требует, чтобы все параметры заголовка были переданы до начала тела HTML-страницы, то вы должны вызывать метод AddHeader в вашем скрипте до того, как начнется описание .... Имеется одно исключение. Если значение свойства Buffer установлено в истину (true), тогда вы можете писать AddHeader в любой точке скрипта, но до первого вызова метода Flush. В противном случае вызод метода AddHeader вызовет ошибку.

    Следующие два.ASP-файла демонстрируют последнее замечание.

    ваш текст на страничке

    В данном примере страница не буферируется. Скрипт работает однако AddHeader вызывается перед тем, как сервер будет производить вывод в HTML клиенту.

    здесь идет некоторая информация вашей странички...

    Во втором примере страница буферируется и как ресультат сервер не выдает текст клиенту до тех пор, пока не кончится сам скрипт или пока не встретится метод Flush. Вы можете использовать данный метод для того, чтобы отослать несколько копий некоторого параметра заголовка с различными значениями, как с заголовком WWW-Authenticate.

    Метод Response.AppendToLog

    Метод AppendToLog добавляет строку в конец файла отчета (log-file) web-сервера. Вы можете вызывать этот метод столько раз, сколько вам необходимо. Каждый раз при вызове метода в файл отчета сервера будет записана указанная вами строка.

    Response.AppendToLog значение

    Параметры:

    • значение - Текст, который будет добавлен к фалу отчета web-сервера. Данная строка не может содержать символ запятой (,). Причем общая длина добавляемой строки не должна превышать 80 символов.
    Замечания:

    Для использования данной возможности вам необходимо, чтобы опция URI Query была разрешена на панели "расширенных свойств ведения log-файла" для данного web-сервера в IIS.

    Метод Response.BinaryWrite

    Метод BinaryWrite позволяет записывать указанную информацию в текущий HTTP-вывод без какого-либо преобразования символов. Этот метод удобен для вывода нестроковой информации, такой как двоичные данные, требуемые каким-либо приложением.

    Response.BinaryWrite данные

    Параметры:

    • данные - Данные, предназначенные для HTTP-вывода.

    Если у вас есть объект, порождающий байтовый массив, вы можете использовать следующий вызов данного метода для передачи этого массива какому-либо приложению, запущенному на клиентской машине.

    Метод Response.Clear

    Метод Clear стирает всю забуферированный HTML-вывод. Однако данный метод не стирает информаицю из буфера, связанную с заголовком. Вы можете использовать данный метод для управления ошибками. Однако выполнение данного метода будет приводить к ошибке если свойство Response.Buffer не истина (true).

    Свойство Response.CacheControl

    Данное свойство предъизменяет установленное по умолчанию значение. Когда вы устанавливаете свойство в значение Public, то Proxy-сервер может кэшировать вывод, генерируемый ASP-ом.

    Response.CacheControl [= cache control header]

    Параметры:

    • Cache control header - Этот параметр управления заголовком может быть либо Public либо Private.
    Свойство Response.CharSet

    Свойство CharSet позволяет добавлять название кодовой таблицы символов (к примеру, WINDOWS-1251) в HTML заголовок, строку content-type (тип содержимого).

    Response.CharSet имя_кодовой_таблицы

    Параметры:

    • имя_кодовой_таблицы - Строка, которая указывает кодовую таблицу для данной HTML-страницы. Наименование данной кодовой таблицы будет добавлено в заголовок HTML-файла под параметром "content-type".

    Для ASP-страницы, для которой не использовано свойство Response.Charset параметр "content-type" в заголовке будет следующим:

    Content-type:text/html

    Если же ASP-файл содержит компанду

    то в заголовке поле content-type будет иметь вид

    Content-type:text/html; charset=Windows-1251

    Замечание:

    Данная функция вставляет любую строку в заголовок и не проверяет ее правильность.

    Если страничка содержит несколько тагов Response.Charset, то каждый последующий будет заменять значение на свое собственное.

    Свойство Response.ContentType

    Свойство ContentType позволяет указывать вид (тип) содержимого HTML-файла. Если данное свойство не использовано, то по умолчанию принимается text/html.

    Response.ContentType [=тип_содержимого]

    Параметры:

    • тип_содержимого - Строка, описывающая тип содержимого HTML. Эта строка обычно имеет вид "тип/подтип", где тип это основная категория содержимого и подтип - указывает тип содержимого. Для получения полного списка поддерживаемых типов - обратитесь к документации к браузеру или спецификации HHTP.

    Следующий пример илюстрирует установку типа содержимого как Формат Определения Каналов (Push-каналы).

    Второй пример демонстрирует установку свойства в наиболее общеизвестные значения.

    Свойство Response.Expires

    Свойство Expires указывает промежуток времени пока страница HTML закешированная браузером считается не утратившей силу (срок хранения). Если пользователь запрашивает закешированную страницу у браузера, у которой не вышел срок "хранения", то браузер возвращает ее прямо из своего кэша.

    Response.Expires [=число]

    Параметры:

    • число - Количество времени в минутах перед тем, как страница будет считаться "просроченной". Установка этого значения в 0 заставляет данную страницу становится "просроченной" незамедлительно.

    Замечание:

    Если данное свойство установлено более чем один раз на странице, то используется самое маленькое значение.

    Свойство Response.ExpiresAbsolute

    Свойство ExpiresAbsolute указывает время и дату, после которого страница HTML закешированная браузером считается утратившей силу (вышел срок хранения). Если пользователь запрашивает закешированную страницу у браузера, у которой не вышел срок "хранения", то браузер возвращает ее прямо из своего кэша. Если время указано (а дата указана), то "срок хранения" данной страницы истекает в полночь этого дня. Если ни время ни дата не указаны, то значение присваивается в соответствии с днем и временем, когда был запущен скрипт.

    Response.ExpiresAbsolute [= [дата] [время]]

    Параметры:

    • дата - Указывает на дату истечения "срока хранения". Формат даты должен соответствовать стандврту RFC-1123.
    • время - Указывает на время, когда у страницы истекает "срок хранения". Данное значение переводится в формат GMT (время по Гринвичу) перед тем, как заголовок будет передан клиенту.

    Замечание:

    Если данное свойство определяется более одного раза на странице, то момент истечения "срока хранения" принимается самым скорым из всех указанных значений.

    Свойство Response.IsClientConnected

    Данное свойство является значение только для чтения, то есть этому свойству нельзя присваивать никаких значений. Это свойство указывает на то, подключен ли клиент или уже не подключен к серверу, определенное в последнем из Response.Write.

    Response.IsClientConnected ()

    Замечание:

    Это свойство позволяет вам определять моменты, когда пользователь подключен, и когда отключен от сервера. К примеру, длина периода времени между тем когда сервер ответил и когда клиент сделал запрос дает уверенность в том, что клиент еще подключен и есть смысл продолжить выполнение скрипта.

    © 2005-2017, HOCHU.UA