Модифікація відповіді HTTP (HTTP Response) за допомогою фільтрів, Різне, Програмування, статті

Коли оглядач запитує ASP.NET-сторінку з веб-сервера, движок ASP.NET обробляє запит в кілька кроків, результатом яких буде розмітка, повернута запитуваній оглядачеві для подальшого відображення. Етапи цього процесу іноді називають HTTP-конвеєром , Який може виконати такі завдання, як ідентифікація, авторизація, а також змусити запитувану сторінку обробити свій вміст. На одному з останніх етапів HTTP-конвеєра оброблена розмітка передається фільтру відповідей (response filter), який (за наявності) має можливість досліджувати і змінити розмітку до того, як вона буде повернута запитуваній оглядачеві.

Ви можете створити свої власні response filters за допомогою кількох рядків коду і пов’язати їх з відповідним типом сторінки (наприклад, ASP.NET-ресурси, що створюють HTML), або для всіх ASP.NET-ресурсів. Якщо ви використовуєте інтегрований режим IIS 7, то ви можете змусити ваш фільтр працювати з вихідними даними будь-якого типу. Дана стаття надає огляд фільтрів відповіді і демонструє два фільтри: простий фільтр, який вирізає прогалини для того, щоб зменшити розмір переданої розмітки, і фільтр, який додає повідомлення про авторські права в нижній частині всіх сторінок. Ви можете завантажити ці два фільтри, а також додаток з прикладами в C # і Visual Basic, в кінці статті. Читайте далі, щоб дізнатися більше про це!


Короткий огляд фільтрів відповіді


Фільтри відповіді були додані в ASP.NET версії 1.1 і надають розробникам спосіб програмного дослідження і модифікації вмісту запитуваної ресурсу після того, як воно було згенеровано, але до того, як воно буде відіслано до клієнта. Коли запитується і обробляється сторінка ASP.NET , Вихідна інформація записується в примірник HttpWriter. Об’єкт HttpWriter получаетзапісиваемие дані і періодично записує вміст в потік, що повертається клієнтові. Для поліпшення продуктивності об’єкт HttpWriter виробляє буферизацію даних і посилає в потік по частинах (замість того, щоб посилати по одному символу).


Потік – це об’єкт, який розширює клас Stream в просторі імен System.IO. Коротенько, потік функціонує як буфер, де дані можуть бути записані і лічені. Існує безліч вбудованих в. NET Framework потоків, які використовують різні сховища в якості буфера. Наприклад, клас MemoryStream є потоком, який зберігає свій буфер в пам’яті, а FileStream – у файлі на жорсткому диску.


Потоки мають джерело вхідних даних і місце вихідних даних. Дані отримані за допомогою методу Read і додаються до потоку за допомогою виклику методу Write. Наступна діаграма демонструє потік, який використовується об’єктом HttpWriter – об’єкт HttpWriter записує в потік дані з оброблюваної сторінки, які потім зчитуються і відправляються клієнту.


Пов’язуємо безліч фільтрів відповіді в ланцюзі


Як ми тільки що побачили, існує можливість зв’язування спеціалізованого фільтра відповіді між об’єктом HttpWriter і які виходять потоком, але вас нічого не зупинить від зв’язування всього лише одного потоку. Додаток даної статті включає в себе другий фільтр відповіді, названий AddCopyrightFilter, який впроваджує повідомлення про права в нижній частині всіх сторінок, до яких він був застосований. Зокрема, він додає наступне вміст відразу ж після закриває тега :


<div class=”Copyright”>
   Copyright Scott Mitchell  CurrentYear
</div>


Даний принцип може бути розширений таким чином, щоб він впроваджував інші типи стандартної розмітки на сторінках, такі як JavaScript, що використовується веб-інструментами, як Google Analytics або лічильниками відвідуваності веб-сайту.


Фільтр AddCopyrightFilter розширює клас MemoryStream і перевантажує його метод Write, але працює трохи по-іншому, ніж WhitespaceFilter. Замість обробки кожної частини даних, які приходять в метод Write, AddCopyrightFilter буферизирует вхідні дані в StringBuilder. Як тільки буфер містить ““, він впроваджує повідомлення про права і висилає повний текст буфера в такій потік ланцюга. (Дане поведінка передбачає, що сторінки, з якими працює фільтр, закінчуються текстом ““. Якщо цей фільтр буде використовуватися на сторінці, яка не закінчується тегом “” , То клієнту нічого не буде вислано!)


Фільтри відповіді AddCopyrightFilter і WhitespaceFilter можуть бути пов’язані в ланцюг. Наприклад, ви можете встановити властивість Response.Filter наступним чином:


Response.Filter = new AddCopyrightFilter(new WhitespaceFilter(Response.Filter))


Додаток, доступне в кінці статті, не використовує в точності той код, який я вказав вище, але замість цього реалізує ланцюг фільтрів пов’язуючи AddCopyrightFilter в Global.asax і WhitespaceFilter в WhitespaceFilterDemo.aspx класу з фоновим кодом сторінки.


Висновок


Фільтри відповіді (Response filters) це механізм, яким розробник може програмно досліджувати і модифікувати потік виходять даних після того, як вміст веб-сторінки було оброблено, але до того, як дані були повернуті клієнту. Фільтри відповіді можуть бути використані для компресії або модифікації виходять даних, як наприклад додавання повідомлення про права або стандартний текст. Дана стаття розглянула два приклади фільтрів відповіді: один видаляв зайві пробіли з обробленого HTML-коду, а інший додавав повідомлення про права на сайт в нижній частині всіх сторінок, до яких був застосований фільтр.


Веселого програмування!

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*