Как распознать 408 HTTP-Statuscode?

#javascript #firefox-addon #http-status-codes

#javascript #firefox-дополнение #http-status-codes

Вопрос:

Я разрабатываю дополнение для Firefox, которое выполняет действия, если statuscode является ошибкой 4xx или 5xx. Он работает довольно хорошо, как и сейчас, но не предпринимает действий, если код ошибки равен 408. Firefox выдает мне ошибку, но ошибка никогда не достигает моего расширения.

Мой httpobserver выглядит следующим образом:

 observe: function(aSubject, aTopic, aData)
{       
    if (aTopic == 'http-on-examine-response') 
    {
        httpstatus = aSubject.responseStatus.toString();
        if(httpstatus.substr(0,1) in {4:1,5:1})
        {
          ...
  

Я также попытался установить окно предупреждения после установки httpstatus (прямо перед if), которое предупреждает обо всех полученных кодах, за исключением ошибки 408.

Кто-нибудь знает, как это сделать? Заранее спасибо!

Ответ №1:

Скорее всего, вы имеете в виду не HTTP-ответ «Истекло время ожидания 408» (это могло бы произойти, например, если прокси-сервер не может связаться с сервером), а NS_ERROR_NET_TIMEOUT — ошибку, сгенерированную Gecko, если он не может связаться с сервером. http-on-examine-response уведомление запускается только в том случае, если получен ответ от сервера, поскольку NS_ERROR_NET_TIMEOUT это не тот случай.

К сожалению, прослушивание таких ошибок невозможно с помощью наблюдателей. Вы можете использовать прослушиватель прогресса, всякий раз, когда загрузка останавливается, его onStateChange метод будет вызываться с флагом aStateFlags including LOAD_STOP и aStatus являющимся статусом канала ( NS_ERROR_NET_TIMEOUT в данном случае).

Комментарии:

1.Я имею в виду код ошибки 408, я разработал сервлет, который отправляет коды ошибок моему клиенту (в целях тестирования). Ваше решение у меня не работает, может быть, я сделал это неправильно? Я попробовал следующие aStatus == 0x804B000E aStatus == "NS_ERROR_NET_TIMEOUT" и aStatus == "0x804B000E" , но ни один из них не работает. Есть предложения?

2. @Termi: aStatus == Components.results.NS_ERROR_NET_TIMEOUT но в остальном я не могу особо помочь, не видя никакого кода.

3. Теперь это работает, спасибо за вашу помощь! Я предупредил aStatus и NS_ERROR_NET_TIMEOUT и выяснил, что если ошибка равна 408, то NS_ERROR_NET_TIMEOUT был на 6 пунктов ниже aStatus, поэтому я просто добавил 6, и теперь он отлично работает.

4. @Termi: «на 6 пунктов выше» будет NS_ERROR_NET_RESET — «Сброс соединения одноранговым узлом». Похоже, ваш сервлет работает некорректно. Смотрите nsNetError.h для получения полного списка сетевых ошибок.

5. Пока это работает так, как есть, у меня нет проблем… Я могу вернуться сюда, если во время тестов возникнут ошибки, но все же спасибо.