Название: Баг - Не пишутся в кэш URL, содержащие спецсимволы Отправлено: DenZzz от 11 января 2007, 22:46:19 По мотивам ру-борда (пост Dem_anywhere), чтобы не забылось:
Цитировать урл вида search.php?text="tatata" в кеш не пишется. Я конечно понимаю, что это вебмастер наглюкал и не преобразовал в %22 - но тем не менее... Ради интереса прошёлся по всяким хитрым символам - аналогично происходит с <> Ослик при отдаче отдаёт их в запрос без преобразования... Проверил. Правило из "Запись в кэш" срабатывает, а файл в кэш не попадает! P.S. Конечно, это можно "вылечить" несколькими правилами для списка "Переадресация" или "Преобразование URL": Код: #5#~#True#~#"#~#%22#~#True#~#True #5#~#True#~#<#~#%3C#~#True#~#True #5#~#True#~#>#~#%3E#~#True#~#True но все-таки... Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Сергей от 12 января 2007, 12:41:07 Проверил. Правило из "Запись в кэш" срабатывает, а файл в кэш не попадает! И не должны. Т.к. эти символы нельзя в именах файлов использовать. Это недоработка в алгоритме преобразования URL2File. Правила в Преобразовании URL решают проблему, но лучше, чтобы HC сам это делал. Еще достает, что HC не сообщает об ошибках когда не удалось записать в кэш Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: DenZzz от 12 января 2007, 14:55:48 Сергей
Цитировать И не должны. Т.к. эти символы нельзя в именах файлов использовать. Должны, т.к. много какие символы нельзя в именах файлов использовать, однако HC их атоматически заменяет на другие, которые можно использовать! А про эти забыли... Цитировать Это недоработка в алгоритме преобразования URL2File. Правила в Преобразовании URL решают проблему, но лучше, чтобы HC сам это делал. Согласен. Цитировать Еще достает, что HC не сообщает об ошибках когда не удалось записать в кэш HC пишет об этом в лог в отладочной информации. Когда файл сохранен на диск, то в логе есть строка, типа: Код: File D:\HANDYCACHE\Cache\forum.ru-board.com\topic.cgi^\forum=5&topic=21354&start=1340 created, А когда файл не был сохранен, то такой строки нет! Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Дем от 12 января 2007, 16:18:47 Цитировать P.S. Конечно, это можно "вылечить" несколькими правилами для списка "Переадресация" или "Преобразование URL": Да, только наверно именно в "преобразовании", т.к. хрен его знает, как сайт на преобразованное среагирует. Я себе такие правила сделал, чтобы оно было аналогично преобразованию других спецсимволов. #5#~#True#~#"#~##'#~#True#~#True #5#~#True#~#<#~##(#~#True#~#True #5#~#True#~#>#~##)#~#True#~#True Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Сергей от 12 января 2007, 17:13:28 Я себе такие правила сделал, чтобы оно было аналогично преобразованию других спецсимволов. Проблемы нет в опере, т.к. она преобразует спецсимволы сама. Зачем изобретать велосипед? С твоими правилами, при использовании одновременно IE и Оперы, получишь в кеше дубли файлов.#5#~#True#~#"#~##'#~#True#~#True #5#~#True#~#<#~##(#~#True#~#True #5#~#True#~#>#~##)#~#True#~#True Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Дем от 12 января 2007, 18:34:28 ну собственно никто не мешает добавить и
#5#~#True#~#%22#~##'#~#True#~#True #5#~#True#~#%3C#~##(#~#True#~#True #5#~#True#~#%3E#~##)#~#True#~#True Но надо помнить и одно из главных правил программирования - программа должна корректно реагировать на непредсказуемые данные на входе. А вообще, смотрим RFC1738. Там нет ни слова, что некоторые символы должны заменяться на %хх - а только то, что последовательность %хх следует рассматривать как код символа. Да и то - только в "стандартном" НТТР, сервер таковым быть не обязан. И вообще, единственное, в чём можно быть уверенным - что в URL не будут символы из диапазона х00-х1F... Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Дем от 13 января 2007, 02:31:41 Ещё одна глюка с кешем нашлась.... Обнаружилось несколько файлов с подобным содержимым, несмотря на то, что в браузер он более-менее нормально отдался
Код: 0000000000: 1F 8B 08 00 00 00 00 00 │ 00 03 43 6F 6E 74 65 6E *** *Conten 0000000010: 74 2D 54 79 70 65 3A 20 │ 74 65 78 74 2F 68 74 6D t-Type: text/htm 0000000020: 6C 3B 20 63 68 61 72 73 │ 65 74 3D 77 69 6E 64 6F l; charset=windo 0000000030: 77 73 2D 31 32 35 31 2D │ 43 6F 6E 74 65 6E 74 2D ws-1251-Content- 0000000040: 45 6E 63 6F 64 69 6E 67 │ 3A 20 67 7A 69 70 16 02 Encoding: gzip** 0000000050: 00 Т.е. запись строки пошла прямо после заголовка, а контент куда-то пропал... Да, возможная причина глюка - файл не был докачан до конца (это факт), т.е. архив битый. Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: mai62 от 13 января 2007, 04:16:10 Дем
Ну и где тут глюк? Сам пишешь Цитировать файл не был докачан до конца (это факт), т.е. архив битый Тогда чего удивляться, чтоЦитировать запись строки пошла прямо после заголовка, а контент куда-то пропал... Раз уж речь зашла об официальных документах, то позволю себе цитату из rfc 1738 - Uniform Resource Locators (URL)Цитировать Unsafe: Characters can be unsafe for a number of reasons. The space character is unsafe because significant spaces may disappear and insignificant spaces may be introduced when URLs are transcribed or typeset or subjected to the treatment of word-processing programs. The characters "<" and ">" are unsafe because they are used as the delimiters around URLs in free text; the quote mark (""") is used to delimit URLs in some systems. The character "#" is unsafe and should always be encoded because it is used in World Wide Web and in other systems to delimit a URL from a fragment/anchor identifier that might follow it. The character "%" is unsafe because it is used for encodings of other characters. Other characters are unsafe because gateways and other transport agents are known to sometimes modify such characters. These characters are "{", "}", "|", "\", "^", "~", "[", "]", and "`". All unsafe characters must always be encoded within a URL. For example, the character "#" must be encoded within URLs even in systems that do not normally deal with fragment or anchor identifiers, so that if the URL is copied into another system that does use them, it will not be necessary to change the URL encoding. Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: Дем от 13 января 2007, 12:53:20 Цитировать Ну и где тут глюк? Если на диск пишется файл, не содержащий полезной информации - то это что?Цитировать Раз уж речь зашла об официальных документах, Это немножко не про то. unsafe - это те символы, которые могут быть "съедены" или браузером - # - или всякими промежуточными гейвеями и т.д. Но в последнем случае они вполне могут присутствовать в урле как специально предназначенные для них.Кроме того, запрос можт делать не браузер, а другая программа (тот же AJAX) - и там строка попадает непосредственно в запрос без всякой обработки на стороне клиента. Название: Re: Баг - Не пишутся в кэш URL, содержащие спецсимв Отправлено: DenZzz от 14 января 2007, 01:46:39 Для обсуждения действующего алгоритма преобразования URL в имя файла в кэше создана отдельная тема (http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.0/)!
Powered by SMF 1.1.3 SMF © 2006, Simple Machines LLC
Joomla Bridge by JoomlaHacks.com |