Super
да, там же есть метка в 3 символа вначале утф иногда
Super
понял, спасибо, буду думать, как это реализовать
Snusmumriken
Автоматические определяляторы mime-типов или, например, кодировок - тоже работают с эвристикой и никогда не могут точно гарантировать результат. Даже по сигнатуре, можно задетектить не то что там есть (по счастливому стечению обстоятельств, у бессигнатурного файла создалась сигнатура чего-то левого).
Super
понял, спасибо, буду думать. возможно я выберу самые отвратительные символы и попробую именно их искать. в большом файле они обязательно встретятся почти всегда.
Super
те, которые вообще не видно визуально, типа переносов всяких хитрых
Maxim
Super
это легко, есть же body_filter_by_lua
Maxim
Super
потому что там может быть не указан тип, может быть левый указан
Super
так хватит первого чанка
Super
в теории сделать так - поставить переменную в nginx set $first_chunk "YES" и после первой проверки ее в "NO" переименовать - сработает только 1 раз
Super
а по поводу тайпа - я вот например делал такую штуку - если нет изображения jpg я просто с помощью луа выдавал там дефолтное изображение - и оно было в png - браузер выводил пнг
Super
ну например content-type text/html а там здоровенный бинарник видео
Super
его точно не надо трогать
Super
прикол в том, что браузер его все равно проиграет
Super
но чаще он просто вообще не указан, application/octet-stream
Super
а так я вот этот класс нашел https://github.com/spacewander/lua-resty-mime-sniff
Super
спасибо за помощь, буду думать. может быть и вправду не стоит сильно заморачиваться, в большинстве случаев все же content-type соответствует реальности
Maxim
mva
Super
спасибо, гляну ее
mva
спасибо, гляну ее
она, если что, находится в пакете с утилитой file. Которая делает ровно то, что ты хочешь: по первым чанкам определяет контент-тайп. В т.ч. может и в виде mime-type'а
Super
да, это то что нужно
mva
mva ~ cat /tmp/a.o | file -i -b -
application/x-object; charset=binary
mva ~ cat /tmp/a.sh | file -i -b -
text/plain; charset=us-ascii
Saphire
Maxim
Наткнулся сейчас на интересный способ определения mime_type картинки
mva
а у binwalk в коробке только толпа питонятины
// среди которой я, приглядевшись, нашёл сейчас и файлы, которыми пользуется libmagic для определения типов :)
Super
у меня еще вопрос, как мне в access_by_lua тотально завершить выполнение скрипта и больше ничего не делать?
Super
ngx.exit(200) не работает, после него все равно отрабатывет прокси пасс и боди фильтр
Maxim
ngx.exit(0) уже пробовали?
Super
а как мне ее прекратить, есть способ?
Super
я хочу выдать контент из кеша и завершить работу, не хочу дальше обрабатывать
Super
при этом я хочу 200 выдать естественно
mva
Super
ngx.say(page)
ngx.exit(200)
Super
но проблема в том, что после этого оно выполняет дальнейшие директивы
mva
mva
x>200
mva
это прямо в документации написано >_>
mva
хотя, нет, вру
mva
там написано >=200
mva
Тогда, возможно, баг
Super
ну вот проблема в том, что на этом скрипт не заканчивается
Super
выполняется proxy_pass
mva
покажи целиком локейшн
Super
ой, там на несколько страниц
Super
я кусок покажу, секунду
Pavel
Super
access_by_lua { ngx.say(page) ngx.exit(200) }
proxy_pass $target;
header_filter_by_lua_block { ... }
body_filter_by_lua_block { ... }
Super
ну вот общая схема
Super
я хочу сделать следующее - в access_by_lua при моем желании остановить скрипт
Super
выдать нужный мне контент и не выполнять proxy_pass, не выполнять хедер фильтр и не выполнять боди фильтр
Super
хотя я кажется понял, в чем глюк
Super
вероятно body_filter и header_filter выполняются в любом случае, даже если я вывожу просто ngx.say в access
Super
я сейчас должен убегать, надо дочь к врачу вести, спасибо за помощь, чуть попозже сегодня проверю это
mva
собственно, судя по всему, да
mva
*filter'ы выполняются на другом уровне
Super
просто я думал ngx.exit(200) их тоже завершает
Super
а получается, что нет
mva
но ты можешь попробовать внутри access положить в ctx "не надо выполняться" и в фильтрах проверять это дело
Super
я как это увидел, я писал </html> = <!— FROM CACHE —></html> в фильтре и клал в кеш
Super
и оно нарастало - потом 2 надписи стало, потом 3
Super
так я понял, что оно продолжает выполняться
Super
в ообщем, протестирую как вернусь это
Pavel
К слову - можно как либо пробрасывать контекст между инструкциями?
Я сейчас через флаги в хедерах делаю, но это неудобно
Super
через ngx.var.
Super
в рамках одного запроса, но оно видно во всех фильтрах в аксес в хедер
Pavel
То что надо
Super
я проверил - ngx.var. решает вопрос, просто когда я выдаю страницу из кеша в аксесе, я пишу переменную from_cache = YES и если она в таком значении, то фильтры вхолостую прогоняю
Super
привет, спасибо, было бы интересно глянуть
Super
написал тебе в личку