Кэш, проблема с 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

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

  • Перешёл на 24 версию, глюки с кэшем полезли с новой силой.

    Запрос был, "Получить последний элемент кэша" возвращает пустоту, в списке элементов кэша запрос выглядит так:

    {
        "body": "",
        "error": "",
        "is_error": 0,
        "is_finished": 1,
        "post_data": "...",
        "request_headers": [...],
        "response_headers": [...],
        "status": 200,
        "url": "..."
    }
    

    Т.е. запрос выполнен успешно, но ответ пустой

  • @Fox я понял, ответ пропадает после перенаправления или обновления страницы. Вот тестовый скрипт со страницей cache_test.zip

    Если закомментить location.reload(), то ответ не будет пустым.

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

  • @rnd если не изменяет память в 23 версии было также, сталкивался с этим.

  • @UserTrue скорее всего, да, причина та же, но почему-то после перехода на 24 таких случаев стало намного больше. В любом случае, это ненормально

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

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

    если сразу предварительно чистить кеш, не поможет? (перед всеми действиями с ним)

  • @kuzkuz ещё в 23 версии я так и сделал - перед нажатием кнопки чищу, жму кнопку и ожидаю запрос. По-моему, после этого количество пустых ответов значительно уменьшилось, но в 24 ответ стабильно пуст, некоторые функции моего скрипта стали неработоспособны.

    Судя по всему, это известная "особенность" и исправления не будет

  • Перестал работать кеш на крайней версии BAS

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

    Перестал работать кеш на крайней версии BAS

    ясно

  • В получить все элементы кэша - есть нужный пост запрос и он последний.
    Пытаюсь получить последний элемент кэша для этого пост запроса - указываю юрл этого пост запроса - получаю пустоту.
    Версия баса 26.1.0

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

    В получить все элементы кэша - есть нужный пост запрос и он последний.
    Пытаюсь получить последний элемент кэша для этого пост запроса - указываю юрл этого пост запроса - получаю пустоту.
    Версия баса 26.1.0

    Забудь, в БАСе только отпечатки и браузер обновляют 🤷‍♂

  • 0 Votes
    7 Posts
    717 Views
  • 0 Votes
    5 Posts
    711 Views
  • 0 Votes
    7 Posts
    1338 Views
  • 0 Votes
    7 Posts
    1861 Views
  • BAS и Xevil

    Поддержка
    0 Votes
    6 Posts
    2586 Views