Автор |
Сообщение |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Фильтр для любителей экономить трафик. Я думаю, все знают про бесплатный сервис WebWarper. Этот фильтр решает задачу загрузки всех сайтов, кроме указанных в списке NonWarped через указанный сервис в сжатом виде.
In = FALSE
Out = TRUE
Key = "URL: WebWarper"
URL = "^$LST(NonWarped)"
Match = "http://\1"
Replace = "$JUMP(http://www.webwarper.net/ww/~GZ/\1)"
Список NonWarped обязательно должен включать строку
www.webwarper.net/ww/*
В противном случае будет зацикливание
Следующая задача - зачистка содержимого полученной страницы от варперовских модификаций.
Оценки, критика, советы и пожелания приветствуются.
тему подправил. для пущей важности ;-) /RoKir
Последнюю версию Bonart'a от 17 Авг 2005 с описанием смотреть здесь.
А последнию версию от vital mogilny датируемую 8 Мартом 2006 смотреть здесь , а описание его фильтров здесь
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Посмотрим.. Пока что самое сомнительное в этом сервисе -- это заявление:
Цитата: |
Unfortunately, most of the Web-servers do not use this technique still. |
Я вот, наоборот, большинство постоянно посещаемых сайтов через gzip получаю. Статистики, правда, нет ;) (Может, фильтр для статистики замутить.. :)
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Bonart
Цитата: |
зачистка содержимого полученной страницы от варперовских модификаций |
Чтобы убрать баннеры сверху/снизу, достаточно в AdList добавить строчку типа такой:
Код: |
([^/]++.|)webwarper.net/ww/[^?:@]++.js |
Остальные модификации (типа выкидывания ActiveX) не так уж и плохи ;)
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
2 chAlx
Мне непожатые сайты попадаются частенько.
Ну а те, для кого это редкость могут поменять спискок на белый и внести туда ru-board и ixbt.
Под модификациями я имел в виду не баннеры - их-то как раз Прокс режет влет, а добавляемые WW скрипты, покореженные ссылки плюс всякое добро во входящем заголовке. В идеале загрузка через WW должна стать полностью прозрачной.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Bonart
Цитата: |
поменять спискок на белый и внести туда ru-board и ixbt |
Твои данны по РуБоард устарели на месяц-два :)
Цитата: |
Под модификациями я имел в виду не баннеры |
Ты попробуй сначала ;)
С заголовками не знаю, чего тебе надо: что может, он подставляет оригинальное, а тот же Content-Encoding приходится модифицировать.
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Только что проверил - forum.ru-board.com отдает несжатые странички  (во всяком случае, если судить по заголовкам)
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Bonart
Цитата: |
forum.ru-board.com отдает несжатые странички |
Хоть это и оффтоп, отвечу:
Код: |
+++GET 1885+++
GET / HTTP/1.1
Host: forum.ru-board.com
User-Agent: Mozilla/5.0 (; U;; en-US; rv:1.7.5) Gecko/20041217
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Cookie: [..]
Connection: keep-alive
+++RESP 1885+++
HTTP/1.1 200 OK
Date: Thu, 23 Dec 2004 13:47:13 GMT
Server: Apache
Pragma: no-cache
Last-Modified: Thu, 23 Dec 2004 09:47:05 GMT
Content-Type: text/html; charset=windows-1251
Content-Encoding: gzip
Content-Length: 7932
X-Cache: MISS from proxy.awanti.com
Connection: close |
Вот оттуда тема про это. Так что проверяй свой исходящий запрос.
ПС: А может ты между Проксом и браузером (на выходе zlib.dll) проверял? ;)
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Mea culpa
Там проходит несколько запросов, по основному действительно идет сжатый траф.
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Усовершенствовал свой фильтр (теперь уже набор фильтров) для WebWarper. Теперь основной фильтр перенаправляет только вызовы из белого списка (Warped), а фильтр Warp it! занимается его автоматическим пополнением.
Цитата: |
##
In = FALSE
Out = TRUE
Key = "URL: WebWarper (out)"
URL = "(^$LST(NonWarped))&($LST(Warped))"
Match = "http://\1"
Replace = "$JUMP(http://www.webwarper.net/ww/\1)"
##
In = TRUE
Out = FALSE
Key = "Content-Type: Warp it! (in)"
URL = "(^$LST(NonWarped))&(^$LST(Warped))"
Match = "(text/*)\1&(^$IHDR(Content-Encoding:*))&($IHDR(Content-Length:[#1000-*]))&($ADDLST(Warped,\h/))"
Replace = "\1"
|
Критерий занесения хоста в список на сжатие: отдача несжатого текста размером более 1000 байт.
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Следующая редакция WW Filter Set  Критерии пополнения белого списка изменены, добавлен фильтр для пополнения черного списка.
Цитата: |
## Пополнение черного списка
In = TRUE
Out = FALSE
Key = "Content-Encoding: Not warp it (in)"
URL = "^$LST(NonWarped)"
Match = "(*gzip*)\1&($ADDLST(NonWarped,\h/))"
Replace = "\1"
## Пополнение белого списка
In = TRUE
Out = FALSE
Key = "Content-Type: Warp it! (in)"
URL = "(^$LST(NonWarped))&(^$LST(Warped))"
Match = "(text/*)\1&($RESP(200*))&(^$IHDR(Content-Encoding:*))&($ADDLST(Warped,\h/))"
Replace = "\1"
## Передача URL WebWarperу
In = FALSE
Out = TRUE
Key = "URL: WebWarper (out)"
URL = "(^$LST(NonWarped))&($LST(Warped))"
Match = "http://\1"
Replace = "$JUMP(http://www.webwarper.net/ww/\1)"
|
В черный список (NonWarped) желательно сразу занести вот эти строки (особенно первую, вторая довольно быстро попадет и так  ):
Теперь в список Warped (белый) попадают хосты, вернувшие несжатый текст с кодом ответа 200 (OK). В список NonWarped (черный) - хосты, вернувшие сжатый gzip трафик. Необходимость пополнения черного списка вызвана тем, что некоторые сайты (например, forum.exler.ru) отдают перенаправление (несжатое) с неправильным кодом ответа (200 вместо 302), что приводит к их ошибочному попаданию в список Warped.
2 chAlx
Теперь можешь считать статистику
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
А вот и ссылкочист  - превращает варперизованные ссылки в нормальные.
Цитата: |
Name = "Links UnWebWarper"
Active = TRUE
Multi = TRUE
URL = "[^/]++www.webwarper.net/ww/"
Bounds = "<a\s*</a>"
Limit = 256
Match = "*\1http://www.webwarper.net/ww/*\2"
Replace = "\1http://\2"
|
В IE все пашет прекрасно - в фильтре WebWarper $JUMP можно смело заменять на $RDIR. Но в Опере на сжатых страничках появляются надписи undefined , хотя функциональность не страдает. Помогите разобраться пожалуйста.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Bonart
Да, серьёзно ты развернулся ;)
Я пока пробовать не буду, лучше тебя помучаю. Вот какие темы надо раскрыть:
1. Хост попадает в список в зависимости от первого ответа; хотя сам сайт может отдавать разный контент по разному закодированным. К чему это приведёт?..
2. С несжимаемыми типами *.(css|jpeg|jpg|gif|png|ico|pdf|doc|zip|rar)(^?) логично было бы наоборот сделать: перенаправлять только текст и html, а остальное гнать напрямую.
3. Почему отказался от проверки Content-Length?
4. Возможно, могут быть глюки с редиректными УРЛами (в которых два+ хоста в адресе), т.к. может (?) криво сработать проверка на принадлежность списку. Хотя вроде не должна :)
5. Как вообще оно работает со сложными ссылками: http://www.com:3128/?d=1&go
Вроде с параметрами проблем не должно быть, а вот с портом может накосячить..
6. Зачем проверка " ^$IHDR(Content-Encoding:*)"? Там вроде как deflate означает непакованный контент.
10. Надо бы подчистить код, а то странно выглядят комбинации " *\1", " [^/]++www.", " *gzip*", .. Вот, например, как последний фильтр можно записать (наверно, не проверял;):
Код: |
Name = "Links UnWebWarper [BON]"
Active = TRUE
Multi = TRUE
URL = "(www.|)webwarper.net/ww/?"
Bounds = "<a\s*</a>"
Limit = 256
Match = "\1 href="http://www.webwarper.net/ww/\2'\9"
Replace = "\1 href="http://\2"\9" |
И имя своё вставляй в названия -- всем проще жить будет (и тем, кто будет использовать, и тебе, когда захочешь весь конфиг обновить).
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
ChAlx
1. В принципе может, но пока не замечено - критерий отдачи непакованного текста с кодом 200 в ошибках не уличен. Сейчас поставил это дело на работе, проверяю на наших юзверях
2. Логично в целях эффективности проверять и то, и другое. Но сценарии (PHP и т.д.) тоже надо учитывать, причем желательно и будущие.
Есть другой момент - эти самые сценарии могут вернуть что угодно, в том числе несжимаемый WW контент. В этом случае приходит ответ с несжатым (без webwarper) адресом в Location и кодом 302. Надо будет сделать фильтр, который сможет перехватить такие перенаправления от WW и корректно их обработать (не допустить зацикливания).
3. Этот параметр некоторые сайты не возвращают.
4. Это вряд ли - точнее, пока еще не встречал.
5. По идее никак сжимать не должно - в списке Warped после имени хоста всегда идет слэш.
6. Это страховка на будущее - мало ли как еще будут кодировать. А с deflate - мой прокол.
7. С кодом все дело в том, что я еще в Проксе и регэкспах чайник.
По результатам тестирования на работе изменен черный список. Эталонная строка следующая:
Цитата: |
[^\?]++.(ico|bat|mpg|css|jpeg|jpg|gif|png|rar|zip|exe|com|pdf|swf)((^?)|\?*)
|
Еще на работе Опера показывает сжатые сайты без всякого упомянутого ранее мусора - так что косяк не в фильтрах или браузере, а у меня в настройках
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Цитата: |
# Добавление несжимаемого контента в черный список
In = TRUE
Out = FALSE
Key = "Location: WW Redirect (in) [BON]"
URL = "www.webwarper.net/ww/*"
Match = "(^http://www.webwarper.net/ww/*)&($RESP(302*))&(http://*\1)&$ADDLST(NonWarped,\1)"
Replace = "http://\1"
# Сжатие странички
In = FALSE
Out = TRUE
Key = "URL: WebWarper (out) [BON]"
URL = "(^$LST(NonWarped))&($LST(Warped))"
Match = "http://(*\1.ru(^?)|*\1)"
Replace = "$RDIR(http://www.webwarper.net/ww/\1)"
# Пополнение черного списка
In = TRUE
Out = FALSE
Key = "Content-Encoding: Not warp it (in) [BON]"
URL = "^$LST(NonWarped)"
Match = "(*gzip*)\1&($ADDLST(NonWarped,\h/))"
Replace = "\1"
# Пополнение белого списка
In = TRUE
Out = FALSE
Key = "Content-Type: Warp it! (in) [BON]"
URL = "(^$LST(NonWarped))&(^$LST(Warped))"
Match = "(text/*)\1&($RESP(200*))&(^$IHDR(Content-Encoding:*))&($ADDLST(Warped,\h/))"
Replace = "\1"
# Очистка ссылок от мусора
Name = "Links UnWebWarper [BON]"
Active = TRUE
Multi = TRUE
URL = "[^/]++www.webwarper.net/ww/"
Bounds = "(<a\s*>)|(<img\s*>)|(l<link\s*>)"
Limit = 512
Match = "*\1http://www.webwarper.net/ww/*\2"
Replace = "\1http://\2"
|
Минимально необходимое содержимое черного списка (NonWarped.txt)
Цитата: |
[^\?]++.(avi|mpg|mp3|ppt|ico|bat|mpg|css|jpeg|jpg|gif|png|rar|zip|exe|com|pdf|swf)((^?)|\?*)
|
Фильтры переименованы в соответствии с рекомендациями, добавлен фильтр для корректной обработки обратного перенаправления с WebWarper (сервис отказывается сжимать содержимое - это чревато зацикливанием), расширен черный список, обеспечена работа с каталогом Rambler Top 100 (он добавляет .ru к именам страниц).
Пожалуйста, если увидите в черном списке не только хосты, но и полные URL, запостите их сюда - это сильно облегчит работу по совершенствованию фильтров.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Bonart
Отлично. Осталось проверок в сравнения добавить, и будет совсем круто!
А то оно периодически будет сбоить на нетипичном контексте:
Код: |
Content-Encoding: not_gzipped
<a title="http://www.webwarper.net/ww/">
<iframe src="http://www.webwarper.net/ww/site.ru/">
|
А что там за фигня с файлами .ru ?
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
2 chAlx
C Content Encoding наверно стоит выбросить звездочки вокруг gzip в фильтре Not warp it.
Второе вообще не страшно - www.webwarper.net/ww/ - это ВСЕГДА редирект.
Третье - в фильтре Links UnWebWarper поставил значение
Bounds="(<a\s*>)|(<img\s*>)|(l<link\s*>)|(<(i|)frame\s*>)|(<(i|)layer\s*>)"
С файлами .ru дело такое: сайт top100.ramler.ru зачем-то дописывает .ru в свои ссылки (например, top100.rambler.ru/top100/Automotive/rate0.100.shtml.ru), хотя и без них все прекрасно работает. Зато на этом обламывается WebWarper. Поэтому теперь окончание .ru от URL (но никогда от хоста), передаваемому WW, автоматически откусывается.
|
|
|
К началу |
Профиль Сообщение |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Новогодне-рождественская  редакция моего набора фильтров. Фильтры оптимизированы с целью минимизации обращения к спискам, добавлен фильтр для избежания сжатия заведомо несжимаемого контента, в "ссылкочист" добален еще один тег (object). Дополнено содержимое черного списка по умолчанию.
[^\?]++.(avi|mpg|mp3|mpeg|ppt|ico|bat|css|jpeg|jpg|gif|png|rar|zip|exe|pdf|swf|pic|7z)((^?)|\?*)
Цитата: |
[HTTP Headers]
# Занести сайт в черный список
In = TRUE
Out = FALSE
Key = "URL: Not warp it (in) [BON]"
URL = "^www.webwarper.net/ww/*"
Match = "($IHDR(Content-Encoding: gzip))&(http://(^$LST(NonWarped)))&($ADDLST(NonWarped,\h/))"
Replace = ""
# Занести сайт в белый список
In = TRUE
Out = FALSE
Key = "URL: Warp it! (in) [BON]"
URL = "^www.webwarper.net/ww/*"
Match = "($RESP(200*))&(^$IHDR(Content-Encoding:*))&($IHDR(Content-Type: text/*))&(http://(^$LST(Warped)))&($ADDLST(Warped,\h/))"
Replace = ""
# Сжать сайт из белого списка
In = FALSE
Out = TRUE
Key = "URL: WebWarper (out) [BON]"
URL = "(^www.webwarper.net/ww/*)&(^$LST(NonWarped))&($LST(Warped))"
Match = "http://(*\1.ru(^?)|*\1)"
Replace = "$RDIR(http://www.webwarper.net/ww/\1)"
# Не сжимать сайты из черного списка
In = FALSE
Out = TRUE
Key = "URL: UnWebWarper (out) [BON]"
URL = "www.webwarper.net/ww/$LST(NonWarped)"
Match = "*\1//www.webwarper.net/ww/*\2"
Replace = "$RDIR(\1//\2)"
# Обработка обратного перенаправления с WebWarper
In = TRUE
Out = FALSE
Key = "Location: WW Redirect (in) [BON]"
URL = "www.webwarper.net/ww/*"
Match = "(^http://www.webwarper.net/ww/*)&($RESP(302*))&(http://(^$LST(NonWarped)))&(http://*\1)&($ADDLST(NonWarped,\1))"
Replace = "http://\1"
[Patterns]
# Исправление "варперизованных" ссылок
Name = "Links UnWebWarper [BON]"
Active = TRUE
Multi = TRUE
URL = "www.webwarper.net/ww/"
Bounds = "(<a\s*>)|(<img\s*>)|(l<link\s*>)|(<(i|)frame\s*>)|(<(i|)layer\s*>)|(<object\s*>)"
Limit = 512
Match = "*\1http://www.webwarper.net/ww/*\2"
Replace = "\1http://\2"
|
|
Последний раз редактировалось: Bonart (Вт, Янв 11 2005 22:35), всего редактировалось 4 раз(а) |
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
|
К началу |
Профиль Сообщение |
 |
rokir
Admin
Зарегистрирован: 28.04.2004
Сообщения: 295
Откуда: Msk
|
Присоединяюсь!
Начинаю бета-тестирование.
Еще чуть-чуть, и выложим на сайт.
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Bonart
Filter Developer

Зарегистрирован: 29.11.2004
Сообщения: 78
Откуда: Самара
|
Так, рано я обрадовался  Только что обнаружен и исправлен (в посте тоже!) крупный косяк, приводящий к многократному занесению сайта в список NonWarped. Это было связано с тем, что в поле URL Match у URL срезается протокол (http://), а в других местах - нет. Сейчас работает нормально.
PS: Следующая задача - автоматизированное обновление блоклисктов, благо в Проксе уже есть все для реализации такой задачи исключительно встроенными средствами.
|
|
|
К началу |
Профиль Сообщение |
 |
|