Вопрос или проблема
У меня есть приложение .NET (VueJS), работающее на IIS, которое испытывает проблемы, связанные с CORS, в течение последних двух месяцев. Изначально всё работало идеально, но сейчас, каждый раз, когда пользователь обновляет страницу, фронтенд не может подключиться к бэкенду, и в консоль выводится ошибка CORS.
Эта проблема возникает только тогда, когда страница обновляется. Когда пользователь впервые нажимает на открытие страницы, соединение работает как и ожидалось, без каких-либо ошибок.
Сообщение об ошибке:
Доступ к XMLHttpRequest по адресу 'localhost:55000/employees/getEmployees' с источника 'http://localhost:55000' был заблокирован политикой CORS: Запросы с других источников поддерживаются только для протоколов: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.
В моем бэкенд-коде я настроил CORS следующим образом:
private void configureCors(IServiceCollection services)
{
var clientAddresses = Configuration.GetSection("ClientAddress")
.Get<string[]>();
services.AddCors(options =>
{
options.AddPolicy(name: VUE_CORS,
builder =>
{
builder.WithOrigins(clientAddresses)
.AllowAnyHeader()
.AllowAnyMethod();
});
});
}
ClientAddress: "http://localhost:55000"
Данные запрашиваются с помощью Axios в Vue.js:
getEmployees (searchData) {
this.$http()
.get('/employees', { params: searchData })
.then(({ data }) => {
this.tblEmployeeData = data
})
},
.
Ответ или решение
Ошибка CORS при обновлении страницы в .NET приложении, работающем на IIS
Работа с CORS (Cross-Origin Resource Sharing) может стать причиной неожиданных сложностей при разработке веб-приложений, особенно когда комбинируются клиентские и серверные технологии, такие как Vue.js и .NET, развернутые на IIS. В данном случае мы рассмотрим проблему, с которой вы столкнулись — ошибка CORS на этапе обновления страницы.
Проблема
Ваше приложение, разработанное на Vue.js и работающей с .NET, начинает выдавать ошибку CORS при обновлении страницы. Эта проблема возникает только в случаях, когда пользователь обновляет страницу, а не при первоначальном обращении к API. При этом в консоли браузера появляется следующее сообщение об ошибке:
Access to XMLHttpRequest at 'localhost:55000/employees/getEmployees' from origin 'http://localhost:55000' has been blocked by CORS policy: Cross-origin requests are only supported for protocol schemes: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.
Возможные причины проблемы
Причины возникновения ошибки CORS могут быть разнообразными. В вашем случае необходимо рассмотреть несколько ключевых аспектов:
-
Настройка CORS в .NET: Ваша конфигурация CORS кажется правильной на первый взгляд, но важно проверить, какие адреса передаются из конфигурации
ClientAddress
. -
Проблемы с URL: Убедитесь, что при обновлении страницы URL, по которому осуществляется попытка обращения к вашему API, идентичен тому, который используется при первоначальной загрузке приложения.
-
Отсутствие рядом с конфигурацией CORS: Возможно, CORS не правильно применяется к специфическим маршрутам или методам, если вы применяете CORS только к определенным контроллерам.
Решения
Вот несколько шагов, которые помогут вам устранить проблему:
-
Проверка конфигурации CORS: Убедитесь, что в вашем конфигурационном файле (например,
appsettings.json
) клиентский адрес правильно определён и соответствует тому, с какого вы делаете запросы. Возможно, вам следует попробовать произвести отдельные тесты с другими адресами. -
Проверка применения CORS: Убедитесь, что ваша политика CORS применяется на уровне сервиса, например:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCors(VUE_CORS); // другие middleware }
-
Настройка прокси в Vue.js: Проверьте, правильно ли настроен начальный URL в вашей конфигурации Axios. В некоторых случаях может помочь использование свойства
baseURL
в Axios для устранения проблем с CORS при обращениях к локальному серверу. -
Логи ошибок: Включите логирование запросов на сервере, чтобы отслеживать, когда именно запросы блокируются. Это позволит лучше понять связь между запросами и ошибками.
-
Тестирование различных методов: Попробуйте использовать другие HTTP-методы и убедитесь, что все необходимые методы (POST, PUT, DELETE и т.д.) разрешены в вашей CORS-политике.
-
Актуализация пакетов: Убедитесь, что все используемые пакеты и версии .NET обновлены до последних. Иногда несовместимости версий могут быть причиной неожиданных ошибок.
Заключение
Ошибки, связанные с CORS, могут быть сложными и изнурительными, но ключ к их решению часто заключается в тщательной проверке конфигурации и корректной настройке. Попробуйте предложенные пути решения, и, скорее всего, вы сможете устранить проблему с обновлением страницы. Если проблема сохранится, стоит рассмотреть возможность использования внешних инструментов для отладки или обратиться за помощью к сообществу разработчиков.