Edge on Windows 10 32-битная блокировка ajax-вызова на localhost с сетевой ошибкой 0x2efd
У нас есть приложение, которое использует SignalR, чтобы поговорить с драйверами сканера локально, которые уже несколько лет работают в IE, Chrome и Firefox, которые не имеют проблемы с вытаскиванием заголовков js для файла SignalR. Как только Edge вышел, мы увидели проблему с разговором с localhost и после долгих усилий найти параметр, позволяющий ему общаться (и много часов с билетом Microsoft, что они не нашли решения), мы решили добавить заголовки, чтобы позволить Edge предоставить доступ к домену:
Access-Control-Allow-Origin: https://localhost:11000
Казалось, это сработало, но мы не заметили, что он работал на 64-битной Windows 10 Edge, но не на 32-битной Windows 10 Edge. Я потратил часы, понижая все настройки безопасности для всех зон и отключая Защищенный режим, пытаясь использовать различные трюки ajax, чтобы вытащить файл, но продолжайте получать ошибку:
SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.
Сбой следующего псевдокода:
$.ajax({
url: "https://localhost:11000/signalr/hubs",
crossDomain: true,
success: function (data) {
console.log("success");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("error:");
console.log(jqXHR);
}
});
Я ищу любое представление об установках или что-то еще, чтобы попытаться, или если кто-то еще видел эту проблему. Еще одна часть информации, скрипач не показывает трафик для вызова, поэтому он блокируется браузером. Также на том же компьютере, который не работает с Edge-IE, Chrome и FF преуспеют.
Ответы
Ответ 1
В вашем запросе отсутствуют следующие атрибуты, добавление которых должно решить проблему.
- Метод запроса:
GET
, POST
и т.д.
- Запросить тип содержимого (заголовок):
application/json
и т.д.
- Запрос типа данных (заголовок):
json
, XML
и т.д.
Также просмотрите следующий фрагмент кода:
type:"POST",
contentType:"application/json; charset=utf-8",
dataType:"json"
Ответ 2
Попробуйте в режиме совместимости IE, перейдя в dev-инструменты и выбрав из верхнего раскрывающегося списка, если ошибка все еще происходит с этим, скорее всего, это некоторые системные файлы Windows, которые использует IE. Использует ли этот вызов аутентификацию с сертификатами? Может быть, сертификат устарел или Edge использует другой метод проверки подлинности? Проверьте вкладку источников в IE (как совместимую, так и несовместимую), чтобы узнать, загружен ли ресурс, поскольку Fiddler только фиксирует трафик HTTP и HTTPS. Это должно указывать вам в правильном направлении в отношении ошибок и т.д. Наконец, возможно, просто введите код приложения С#, который делает запрос на тот же URL-адрес, возможно, что в новой версии .NET используются те же зависимости, которые могут нарушить ваши вызов. Если это так, С# даст вам достаточно описательной ошибки, чтобы исправить проблему.
Ответ 3
У меня была такая же проблема. В то время как Ajax вызывает страницу в том же домене, работая в любом другом браузере, в Edge они не будут. Открытие URL-адреса, используемого для вызова Ajax на другой вкладке, даст правильные результаты.
Добавление части кода на страницу, обслуживающую вызовы Ajax, фиксировало ее как-то... Код находится на С#, но, возможно, это даст общее представление о том, как исправить это на других языках.
if (Request.UserHostName == "127.0.0.1")
Response.AppendHeader("Access-Control-Allow-Origin", "*");
Ответ 4
вы можете попробовать это.
$.ajax({
url:url,
type:"POST",
data:data,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(){
//
}
});
и обязательно укажите параметры, тип содержимого, тип данных, responseCode..etc