Пока кэш небольшой, и его еще не очень сложно поправить, хотелось бы более точно знать алгоритм
преобразования и выяснить некоторые вопросы, косвенно касающиеся этой темы.
Файлы во время загрузки пишутся во временные файлы с расширением *.new и *.cnk
Не нашел описание применения файлов с расширением
*.cnk, или оно больше не используется ?
URL во время загрузки записывается во временный файл с расширением
.new, при успешной загрузке
или обрыве связи (если конечный размер файла не известен) расширение
.new отбрасывается, а при
неудачной загрузке файл удаляется ?
При загрузке
адрес-d/имя-f.new запишется во временный файл
адрес-d/имя-f.new.new, а после
загрузки будет переименован в
адрес-d/имя-f.new, но удален не будет ?
Если по адресу
адрес-d/имя-f находится другой файл, то во время загрузки он перезапишет
адрес-d/имя-f.new и затем будет переименован в
адрес-d/имя-f ?
Cоздаваемые папки имеют приоритет перед существующими файлами ?:
Если HC при создании папки обнаружит что уже есть файл с таким же именем, то файл будет
переименован в
имя#_ , и доступ к нему будет утрачен?
Если при создании файла с именем
#m или
#_ , HC обнаружит папку с таким именем, то файл
создаваться не будет?
Записал алгоритм v0.98b1 для себя (см.ниже) - подскажите где наврал.
Вышло уже несколько новых версий HC, в "ToDo" эта тема не фигурирует - возможно алгоритм уже
изменился, если да то как?
Правильно ли указана очередность по пунктам и всем их подпунктам?
При необходимости, или по глупости, можно создать правила, которые позволят обойти
встроенные в HC преобразования?
1. Преобразование заголовков запроса URL:
1.1. Используя серверы-посредники (скрипты LUA - luaR.lst).
1.2. Используя список "Переадресация":
1.2.1. [%25] -> [%]
1.2.2. [%26] -> [&]
1.2.3. [%2f] -> [/]
1.2.4. [%3a] -> [:]
1.2.5. [%3d] -> [=]
1.2.6. [%3f] -> [?]
2. Преобразование URL в имя файла в кэше:
2.1. Используя серверы-посредники (скрипты LUA - lua.lst).
2.2. Через чик "Удалять ссылку на порт 80 из имени файла" в настройках кэша:
[host:80/] -> [host/]
2.3. Через список "Преобразование URL":
2.2.1. ["] -> [%22]
2.2.2. [<] -> [%3C]
2.2.3. [>] -> [%3E]
2.4. Встроенное в HC:
2.4.01. [Редирект] -> [Редирект\#m] (файл)
2.4.02. [URL\] (страница) -> [URL\#_] (файл)
2.4.03. [/] -> [\] (до "?") -> [#%] (после "?")
2.4.04. [//] -> [\~] (до "?") -> [#%~] (после "?")
2.4.05. [///] -> [\~\] (до "?") -> [#%~#%] (после "?")
2.4.06. [?] -> [^\] (первый "?") -> [#^] (следующие "?")
2.4.07. [
*] -> [#x]
2.4.08. [\] -> [#~]
2.4.09. [|] -> [#i]
2.4.10. [!] -> [#I]
2.4.11. [:] -> [!]
2.4.12. На последнем этапе преобразования URL проверяется длина имени (относительно папки кеша).
Если она больше 200, то ищется последний символ [\] в пределах первых 192 символов.
Строка до символа [\] остается, а оставшееся кодируется хешем CRC32:
При длинне URL до 200 -> Папка кэша\URL
При длинне URL свыше 200 -> Папка кэша\[URL до 192]\[CRC32 остатка]