На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Cross domain ajax запрос и response status , не возвращает вменяемую ошибку.
    Всем привет!

    В общем посылаю кросс доменный запрос, и если например ресурс не доступен или еще что то - получаю статус 0, описание ошибки "error".
    Можно ли как то получить вменяемый HTTP статус + описание ошибки? Сейчас у меня в браузере в консоли летит ошибка:

    Цитата
    SCRIPT7002: XMLHttpRequest: Сетевая ошибка 0x80070005, Отказано в доступе.

    В ajax, в обработчике ошибки тупо ничего нет, вот что там есть только:
    Цитата
    Status: 0. Exception: error

    Хотелось бы увидеть более вменяемую ошибку.

    Предварительно погуглив, я вроде как наткнулся на то, что это может быть связано исключительно с Cross domain запросами, в целях безопасности это нельзя получить?
    Я так понимаю это такая защита от инвентаризации? Или таки можно как то получить вменяемый код и описание ошибки?

    Спасибо.
    Сообщение отредактировано: Wound -
      XMLHttpRequest - это устаревший механизм, так что и API у него довольно ограниченное.

      Я бы порекомендовал попробовать подёргать эту информацию из объекта респонза:
      ExpandedWrap disabled
        try {
          let response = await fetch('//yoursite.com');
          console.log(response.statusText); // Возможно информация будет тут
        } catch (e) {
           console.error(e); // Или возможно тут, надо проверять
        }


      https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
        Цитата Serafim @
        Я бы порекомендовал попробовать подёргать эту информацию из объекта респонза:

        А в IE fetch api поддерживается?
          Цитата Wound @
          А в IE fetch api поддерживается?

          Через полифиллы, да.

          Но вообще такого браузера давно нет в живых (последний релиз в 2013ом году был) =)

          P.S.
          1) https://caniuse.com/#feat=fetch
          2) https://github.com/github/fetch
          Сообщение отредактировано: Serafim -
            Проверил с fetch'eм, летит исключение, но оно пустое :'(

            Добавлено
            Цитата Serafim @
            Но вообще такого браузера давно нет в живых (последний релиз в 2013ом году был) =)

            В Windows Server 2016 стоит по умолчанию IE , и другого там нет :yes-sad:

            Добавлено
            Просто вся фишка в том, что сам браузер мне даже возвращает Access Denied, причем любой, IE/Chrome/FF/Edge
            Я отловил запрос с помощью Fidler, он не распознал его статус, а через пару минут у себя выдал ошибку Gateway timeout. Это уже по сути тогда, когда я результат в ajax получил и забыл про него.
              Цитата
              Gateway timeout


              Ну так это проблема сервера, 504 кажись, не?

              Добавлено
              А ещё, как бы для CORS отправляются два запроса:
              1) OPTIONS с получением креденшеналов на доступ к внешнему ресурсу (анализ Cross Origin Policy заголовков)
              2) POST с вызовом и данными.

              Т.е. на корсах отсекается по первому запросу к серверу и данные не отсылаются никуда.

              Добавлено
              Цитата Wound @
              сам браузер мне даже возвращает Access Denied

              А это уже 403 и опять же сервер.

              Когда CORS - в консольке пишется, мол запрещён доступ по причине ХХХ и ошибка содержит кейворд "CORS".

              Типа такого (нагуглил): Прикреплённый файлПрикреплённый файл0_bI2yxKryqJzyUkud.png (152,88 Кбайт, скачиваний: 479)
              Сообщение отредактировано: Serafim -
                Цитата Serafim @
                Ну так это проблема сервера, 504 кажись, не?

                Да 504.
                У меня просто есть тулза, которая висит на localhost, к ней делаются запросы. Так вот, эта тулза может быть не установлена или там вырублена, при посылке запроса на контроллер этой тулзы, хотелось бы как то определять что за ошибка случилась - например там тулза отвалилась, и ошибка 504, или может быть там какая то другая ошибка произошла, например там 401. Но сейчас у меня возвращается тупо 0.


                Цитата Serafim @
                А ещё, как бы для CORS отправляются два запроса:
                1) OPTIONS с получением креденшеналов на доступ к внешнему ресурсу (анализ Cross Origin Policy заголовков)
                2) POST с вызовом и данными.

                Т.е. на корсах отсекается по первому запросу к серверу и данные не отсылаются никуда.

                CORS настроен нормально все, прикрутили авторизацию, сначало шлется OPTIONS с кредами, потом уже тот что нужен. С этим проблем нет. Проблема вот с обработкой ошибок, причем на стороне JS, никак победить его не могу :-?


                Цитата Serafim @
                А это уже 403 и опять же сервер.

                Да сервер, я его специально вырубил и шлю запросы в никуда по сути, пытаясь получить вменяемую ошибку. Вот как то можно получить эту ошибку?

                Добавлено
                Цитата Serafim @
                Когда CORS - в консольке пишется, мол запрещён доступ по причине ХХХ и ошибка содержит кейворд "CORS".

                Типа такого (нагуглил): Прикреплённый файл0_bI2yxKryqJzyUkud.png (152,88 Кбайт, скачиваний: 3)

                А у меня почему то пишется:
                Цитата

                SCRIPT7002: XMLHttpRequest: Сетевая ошибка 0x80070005, Отказано в доступе.

                Или вот например что пишет Chrome:
                Цитата

                :5001/api/Token/ChangeName:1 Failed to load resource: net::ERR_NETWORK_ACCESS_DENIED
                  Потому что ты используешь XHR, по-этому и пишется что-то странное. Я же говорю - это устаревшее API.

                  Цитата Wound @
                  Да 504.
                  У меня просто есть тулза, которая висит на localhost, к ней делаются запросы. Так вот, эта тулза может быть не установлена или там вырублена, при посылке запроса на контроллер этой тулзы, хотелось бы как то определять что за ошибка случилась - например там тулза отвалилась, и ошибка 504, или может быть там какая то другая ошибка произошла, например там 401. Но сейчас у меня возвращается тупо 0.

                  Тут проблема, т.к. 504 возвращается (обычно) без нужных хедеров.
                    Вот кстати такая же проблема: https://stackoverflow.com/questions/2000609...p-status-code-0
                    Вот ему ответили:
                    Цитата

                    In my experience, you'll see a status of 0 when:

                    doing cross-site scripting (where access is denied)
                    requesting a URL that is unreachable (typo, DNS issues, etc)
                    the request is otherwise intercepted (check your ad blocker)
                    as above, if the request is interrupted (browser navigates away from the page)

                    У меня судя по всему первый вариант, но я не понимаю почему. Норм ошибка при кросс доменных запросах не возвращается?

                    Добавлено
                    Ладно, попробую еще с fetch поиграться, может быть я на скорую руку не то написал, но сдается мне этот статус не случайно 0, возможно это какая то CORS защита от инвентаризации при кроссдоменной посылке запросов. Ну типа чтоб не изучали коды ошибок. Уже привык что тут на любой чих какие то ограничения стоят, то всякие CORS, то Antiforgery токены, то еще какая то штука всплывет :D .
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0389 ]   [ 16 queries used ]   [ Generated: 19.03.24, 08:49 GMT ]