Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверить наличие 403 по данному url'у (https://javascript.ru/forum/misc/64684-proverit-nalichie-403-po-dannomu-url%27u.html)

tweentween1 29.08.2016 16:02

Проверить наличие 403 по данному url'у
 
Добрый день! Есть определённый url, нужно проверить, возвращает ли сервер в ответ 403. Пробую через XMLHttpRequest, но проблема в том, что когда сервер формирует 403, заголовка 'Access-Control-Allow-Origin' нет. При этом клиент (браузер) видит, что ему возвращается 403, но не передаёт эту информацию в объект XMLHttpRequest, а вылетает с ошибкой. Подскажите, можно ли это как-нибудь обойти? Чтобы я получал информацию, что 403, но при этом не было грубых ошибок. Может есть какой-то другой вариант, без XMLHttpRequest?

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://d11.cdnvideo.ru/slon3-test-stand/files/w320.webm', false);
xhr.send();

if (xhr.status == 403) {
  alert( xhr.status + ': ' + xhr.statusText );
} else {
  alert( xhr.responseText );
}

scrollquest 29.08.2016 16:59

Нет там решения. Проблема не в xhr, там можно добавить заголовки вроде, проблема в том, что тот домен, на который идет запрос тоже должен разрешить этот запрос. А 403 тебе возвращается как раз потому, что сервер не позволяет кросдоменные запросы. Пробуй через фреймы делать, хотя фреймы сервер тоже может скипить

scrollquest 29.08.2016 17:06

tweentween1,
а вообще, зачем выдрачиваться с xhr, и клиентским кодом вообще, если данный вопрос решается со стороны бекэнда как 2 пальца обоссать?

scrollquest 29.08.2016 17:09

И да, если нуден ответ не по конкретному запросу, а просто по домену, то можешь просто загрузить картинку или скрипт оттуда, через src и проверить, там нет ограничений на кросдоменные запросы как правило.

laimas 29.08.2016 17:16

Цитата:

Сообщение от scrollquest
данный вопрос решается со стороны бекэнда как 2 пальца

403 Forbidden - отказ выполнения запроса не обязательно из-за кроссдоменности.

tweentween1 29.08.2016 17:31

scrollquest,
403 - это не проблема, а фича: сервер отдаёт её в случае гео-ограничения (после проверки). И нужно в этом случае (при ответе 403) выводить на экран вместо контента специальный текст. Архитектуру сервера (например, чтобы в случае гео-ограничения он передавал не 403, а какое-то сообщение) сейчас нет возможности изменить. Нужно как-то научиться обрабатывать 403.

scrollquest 29.08.2016 17:31

laimas,
И что? ты не сможешь проверить с бекэнда, отдается ли 403?

scrollquest 29.08.2016 17:34

tweentween1,
пробуй вариант с src тогда, который я выше предложил

laimas 29.08.2016 17:34

Цитата:

Сообщение от scrollquest
И что?

Ничего, просто если это разработчик закрыл прямой доступ к каталогу, то "как два пальца" не получиться ничем. Автору же нужно анализировать заголовки ответа, судя по вопросу, а не статус.

tweentween1 29.08.2016 17:39

Цитата:

Сообщение от Rise (Сообщение 427013)
Что за ошибка и где?

В консоли браузера:
Код:

geo.html:17 GET http://d11.cdnvideo.ru/slon3-test-stand/files/w320.webm 403 (Forbidden)(anonymous function)

geo.html:17 XMLHttpRequest cannot load http://d11.cdnvideo.ru/slon3-test-stand/files/w320.webm. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:81' is therefore not allowed access. The response had HTTP status code 403.

То есть браузер видит, что 403, но я не знаю, как узнать это внутри JS-кода

tweentween1 29.08.2016 17:43

Цитата:

Сообщение от laimas (Сообщение 427021)
Ничего, просто если это разработчик закрыл прямой доступ к каталогу, то "как два пальца" не получиться ничем. Автору же нужно анализировать заголовки ответа, судя по вопросу, а не статус.

Сорри, может неправильно сформулировал, но нужно анализировать именно статус. То есть узнать внутри JS, что сервер отдаёт 403 при запросе файла (а не какую-то другую ошибку, например).

scrollquest 29.08.2016 17:45

laimas,
то есть, если ты сделаешь запрос с бекэнда заголовки не придут? Или о чем ты чешешь, выражайся ясней. Какой нах, каталог, о чем ты вообще? Ты на бутирате чтоли?

То что способ этот для автора не особо актуален, это да, как выясняется, он хочет георасположение узнавать, у него там че то все через жопу, но ты вообще какую то х*ню несусветную несешь

laimas 29.08.2016 18:27

Цитата:

Сообщение от scrollquest
то есть, если ты сделаешь запрос с бекэнда заголовки не придут?

Почему, get_headers() и нет проблем. Чтобы увидеть, что браузер вернет клиенту, достаточно было просто в его адресной строке сделать запрос.

Я думал не ради статуса в конце концов затея, а получение нужного коли о кроссдоменности пошла речь ("как два пальца"), но если закрыто, то и сервер не получит.

tweentween1 29.08.2016 21:40

Цитата:

Сообщение от laimas
Чтобы увидеть, что браузер вернет клиенту, достаточно было просто в его адресной строке сделать запрос.

Я думал не ради статуса в конце концов затея, а получение нужного коли о кроссдоменности пошла речь ("как два пальца"), но если закрыто, то и сервер не получит.

Да, если вбить в браузере, можно узнать. Можно ли как-то узнать ту же информацию внутри js-кода? То есть, например, сделав запрос к серверу прямо внутри JS.

scrollquest 29.08.2016 22:05

Цитата:

Сообщение от laimas
коли о кроссдоменности пошла речь ("как два пальца"), но если закрыто, то и сервер не получит.

Что ты несешь? На бекэнде нет ограничений, связанных с кросдоменными запросами

laimas 30.08.2016 02:13

Цитата:

Сообщение от scrollquest
На бекэнде нет ограничений, связанных с кросдоменными запросами

Да при чем тут кроссдомен, 403 Forbidden - отказ выполнения запроса не обязательно из-за кроссдоменности.

laimas 30.08.2016 02:21

Цитата:

Сообщение от tweentween1
Можно ли как-то узнать ту же информацию внутри js-кода?

А зачем это нужно вообще?

scrollquest 30.08.2016 08:36

laimas,
По второму кругу пошли. Я так и не понял, что ты пытаешься сказать.

warren buffet 30.08.2016 09:09

tweentween1, без анализа выведи статус сперва, что там, 200 ОК?

warren buffet 30.08.2016 09:10

Если сервер твой, сделай как все люди. Не все заголовки передаются в скрипт. В частности 302, 307 - не передаются и 403 кстати тоже may or may not.

laimas 30.08.2016 13:23

Цитата:

Сообщение от scrollquest
Я так и не понял, что ты пытаешься сказать.

Ну едрить его :D

Можно представить, что нужно получать браузером именно только статус? Хотя тараканы всякие бывают. ) Есть же наверное конечная цель - получить нечто из контента. Но в данном случае закрыт доступ, а значит и серверу не получить его. Это я и имел ввиду, контент, ибо тут речь пошла и о кроссдоменности...

Ты же говоря о сервере, как выясняется, имел ввиду как раз заголовки. То есть я сути вашего диалога не понял. Мы просто разное держали в уме. )


Часовой пояс GMT +3, время: 02:30.