Кэш, проблема с Referer и данными ответа



  • В своём скрипте, чтобы не полагаться на разметку, я ловлю запросы к API и работаю с их результатом. Использую, соответственно, действия "Разрешить кэш", "Был ли запрос" и "Получить последний элемент кэша". Так вот я столкнулся с двумя проблемами:

    1. Если URL запроса подпадает под маску действия "Разрешить кэш", то Referer не отправляется. Из-за этого я столкнулся с ситуацией, когда сервер проверяет Referer и возвращает ошибку.
    2. Чтобы узнать, что запрос был, использую действие "Был ли запрос", если оно вернуло true, то получаю данные ответа через "Получить последний элемент кэша". Бывают случаи, когда "Был ли запрос" возвращает true, а "Получить последний элемент кэша" возвращает пустоту, из-за этого скрипт не может определить результат и что ему делать дальше.

    Это баги? Или "особенности" BAS? Как с этим бороться? Или придётся смириться?



  • @rnd said in Кэш, проблема с Referer и данными ответа:

    В своём скрипте, чтобы не полагаться на разметку, я ловлю запросы к API и работаю с их результатом. Использую, соответственно, действия "Разрешить кэш", "Был ли запрос" и "Получить последний элемент кэша". Так вот я столкнулся с двумя проблемами:

    1. Если URL запроса подпадает под маску действия "Разрешить кэш", то Referer не отправляется. Из-за этого я столкнулся с ситуацией, когда сервер проверяет Referer и возвращает ошибку.
    2. Чтобы узнать, что запрос был, использую действие "Был ли запрос", если оно вернуло true, то получаю данные ответа через "Получить последний элемент кэша". Бывают случаи, когда "Был ли запрос" возвращает true, а "Получить последний элемент кэша" возвращает пустоту, из-за этого скрипт не может определить результат и что ему делать дальше.

    Это баги? Или "особенности" BAS? Как с этим бороться? Или придётся смириться?

    Как можно повторить эти ошибки?



  • Первую проблему можно повторить приложенным скриптом + Fiddler или его аналог. referer.zip

    Со второй проблемой сложнее, возникает она не часто, непонятно, что на это влияет. Происходит это так: скрипт жмёт кнопку, отправляется запрос (без перезагрузки страницы, т.е. AJAX), скрипт в цикле вызывает действие "Был ли запрос", пока оно не вернёт true, потом вызывает "Получить последний элемент кэша", вот оно иногда возвращает пустоту. Я пробовал в этот момент выводить в лог все элементы кэша и там не было нужного URL. У проверки и получении последнего элемента используется одинаковая маска, конечно.



  • Поигрался ещё с кэшем, как-то странно он устроен. Даже если не разрешать кэш, "Был ли запрос" всё равно возвращает true, если запрос был, и если после этого очистить кэш (в котором ничего нет), то "Был ли запрос" станет возвращать false. Также если не разрешать кэш и выполнить запрос, то "Получить последний элемент кэша" будет возвращать пустоту, как раз как я и описывал. Только непонятно, почему такое иногда происходит и с разрешением кэша.



  • @Fox ну что, удалось повторить?



  • @rnd said in Кэш, проблема с Referer и данными ответа:

    @Fox ну что, удалось повторить?

    Нет



  • @rnd Нашел баг - пили кастом решение.



  • @Fox said in Кэш, проблема с Referer и данными ответа:

    @rnd said in Кэш, проблема с Referer и данными ответа:

    @Fox ну что, удалось повторить?

    Нет

    Странно. Приложенный скрипт делает два клика, после первого запрос с Referer, а после второго - нет.

    @FastSpace said in Кэш, проблема с Referer и данными ответа:

    @rnd Нашел баг - пили кастом решение.

    Ага, уже пилю свой BAS



  • @rnd said in Кэш, проблема с Referer и данными ответа:

    Странно. Приложенный скрипт делает два клика, после первого запрос с Referer, а после второго - нет.

    Сегодня попробую ещё раз повторить



  • @rnd первую проблему подтверждаю, столкнулся с такой-же. Дополню, не только реферер не отправляется, ещё сам запрос уходит по http 1.1, без этого бага - по http 2.0

    по поводу второй проблемы - это вроде как нормально
    если запрос был, но при попытке получить последний элемент - пустота, значит запрос выполнился с ошибкой (скорее всего), я это отслеживаю действием "получить все элементы кэша", там отображаются необходимые данные, даже если последний элемент вернул пустоту


Log in to reply