У меня на localhost:8080 живёт небольшой фронтенд на vue, который при помощи axios черпает данные с localhost:1234
При этом на localhost:44306 сертификат самоподписанный, поэтому его приходится периодически добавлять в исключения:
В firefox это добавление действует сутки, кажется. Я специально не добавляю его в исключения на постоянной основе, так как хочу выводить нормальное уведомление при логине: мол, "на бекенде самоподписанный сертификат" или "на бекенде протух сертификат". Особенно вот эта вот вторая ошибка меня прямо интересует, хочется её красиво отловить и показать пользователю.
Однако при дефолтных настройка axios не показывает, что сертификат самопоподписан и недоверен, нет! Для него - "сервер выключен"!
И вот эта мисдиагностика меня просто вообще убивает. Т.е. одно дело, когда пользователи могли бы позвонить и сказать "серт протух", а тут в корне неверное сообщение, которое первую линию техподдержки будет только сбивать с толку, пуская по ложному следу.
Что делать? В какую сторону податься?
Из того, что сам накопал из ежедневных наблюдений.
Известно, что когда идёт запрос на бекенд сначала идёт тестовый запрос OPTIONS, который сначала просто тестирует жив ли сервер, можно ли к нему обращаться (cross origin policy) и т.п. И только после этого идёт реальный POST запрос:
Если же сертификат просрочен - то сразу как только отваливается OPTIONS - уже POST не делается (и это логично), но вот только почему-то этот первый OPTIONS наверху выглядит как сервер недоступен, а не как сертификат просрочен.
В хроме такая же ситуация, проверил для очистки совести, хотя хромом не пользуюсь, т.к. он показывает не все запросы.
Код тривиальный, привожу на всякий случай:
import axios from 'axios';
import { API_URL } from '@/config/config';
import store from '@/store';
const ApiService = {
init() {
ApiService.AxiosReq = axios.create();
axios.defaults.headers.common.Authorization = `Bearer ${store.state.auth.token}`;
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.baseURL = API_URL;
},
post(resource, params) {
return ApiService.AxiosReq.post(resource, JSON.stringify(params));
},
get_error(error) {
if (error.response) {
if (error.response.status === 400) {
return 'Неверный логин и/или пароль.';
}
if (error.response.status === 401) {
return 'Истёк срок токена. Нажмите Logout, затем войдите снова.';
}
if (error.response.status === 403) {
return 'Недостаточно прав для выполнения этой операции.';
}
return error.response.status;
}
if (error.request) {
return 'Сервер недоступен. Попробуйте позднее.';
}
return error.message;
},
};
export default ApiService;
Обработку ошибок делал по образцу на офсайте axios.
В error ничего нет, за что можно зацепиться - только общее "Network error"
Виртуальный выделенный сервер (VDS) становится отличным выбором
На сайте https://ivararu/ внизу главной страницы есть слайдер с фотками из Инстаграма, при клике на фотки открывается модальное окно с фоткой и комментариями...
у меня есть два скрипта для формаПервый ajax скрипт отправляет ajax форму с данными на е-майл
Хочу по нажатию на ссылку на одной странице, изменить элемент другой страницы(изменить тэг) и что-бы это было real time, подскажите как можно это...