Возможная проблема CORS с приложением Windows

У меня есть проект Cordova в Visual Studio. Мне нужны данные сервера, которые я получаю, выполняя запросы ajax GET. Я исправил проблемы CORS, добавив метатег

<meta http-equiv = "Content-Security-Policy" .../>

и мой внутренний сервер также отвечает на запросы CORS, потому что я добавил эту строку в свой web.config:

<add name = "Access-Control-Allow-Origin" value = "*" />

Моя установка РАБОТАЕТ в моделировании и на устройствах для iOS и Android.

Теперь мне нужно сделать свое первое приложение для Windows. Когда я перехожу на сборку для Windows 10, в режиме отладки приложение никогда не получает данные с сервера.

Это мои наблюдения:

  1. Сервер не получает никаких запросов от приложения.
  2. Когда я нажимаю F12 и смотрю на вкладку «Сеть», запрос помечается статусом 200, хотя запрос не зарегистрирован на сервере.
  3. Если я запускаю Fiddler, приложение начинает получать данные, то есть данные возвращаются на каждый запрос.

Возможная проблема CORS с приложением Windows

На этом снимке экрана показаны инструменты разработчика. Я нажимаю кнопку «Обновить» в приложении. Первые 2 записи делаются без запущенного Fiddler. Затем я запускаю Fiddler, и теперь данные возвращаются. Я заметил «(Из кеша)» в столбце «Получено», но нажатие кнопки «Очистить кеш» (в инструментах разработчика) не устраняет проблему.

Есть ли какие-то особые настройки, которые я мог бы не установить для Windows в Кордове?

Редактировать: Вот простой источник, который так же терпит неудачу. Для воспроизведения создайте пустой проект Cordova в Visual Studio, добавьте jQuery и разверните.

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv = "Content-Security-Policy" content = "default-src 'self' 'unsafe-inline' data: * gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

        <meta http-equiv = "content-type" content = "text/html; charset=UTF-8" />
        <meta name = "format-detection" content = "telephone=no">
        <meta name = "msapplication-tap-highlight" content = "no">
        <meta name = "viewport" content = "user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel = "stylesheet" type = "text/css" href = "css/index.css">
        <title>WinApp</title>
        <script src = "scripts/jquery-3.3.1.min.js"></script>
        <script type = "text/javascript">
            function ajaxReq() {
                $.ajax({
                    type: 'GET',
                    url: 'http://192.168.1.79/',                    
                    dataType: 'json', 
                    success: function (msg, status, jqXHR) {
                        alert('it worked')
                        return true;
                    },
                    error: function (jqXHR, exception) {
                        alert('it failed')
                        return false;
                    },
                    timeout: 30000
                });
            }
        </script>
    </head>
    <body>

        <script type = "text/javascript" src = "cordova.js"></script>
        <script type = "text/javascript" src = "scripts/platformOverrides.js"></script>
        <script type = "text/javascript" src = "scripts/index.js"></script>

        <button onclick = "ajaxReq(); return false;">click me</button>
    </body>
</html>

Опубликованный код работает, если он запущен как симуляция браузера для iOS и Android. Он не работает на локальном компьютере для сборок Windows (x86 и x64).

Похоже на проблему с сетью. Вы использовали какой-нибудь прокси? А вы пробовали другие общедоступные веб-службы?

Elvis Xia - MSFT 10.05.2018 08:54

Прокси отсутствует, сервер находится в локальной сети. И я не особо задумывался о сетевых проблемах, поскольку, если я просто собираю для iOS или Android, у меня не будет проблем. Есть ли какие-то особые настройки для Windows, которые могут быть связаны с этим? Это моя первая сборка для этой платформы.

Mr. Blonde 10.05.2018 08:59

Никаких особых настроек кроме разрешения. но так как он хорошо работает с открытым скрипачом. Я не думаю, что это проблема с разрешением.

Elvis Xia - MSFT 10.05.2018 09:46

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

Mr. Blonde 10.05.2018 09:59

И это не имеет смысла, когда код состояния 200, пока сервер ничего не получил. Не могли бы вы попробовать отладить и посмотреть, не вернется ли что-нибудь?

Elvis Xia - MSFT 10.05.2018 10:11

Когда я отлаживаю, поведение похоже на проблему с CORS. Запрос Ajax немедленно завершается с ошибкой с кодом 0. И это происходит так быстро, что я уверен, что запрос никогда не был отправлен.

Mr. Blonde 10.05.2018 19:23

Не могли бы вы поделиться базовой демонстрацией, которая может воспроизвести проблему? Я попробую на моей стороне.

Elvis Xia - MSFT 11.05.2018 04:43

Я добавил к вопросу упрощенный источник. Я обнаружил, добавлю ли я внешний URL-адрес - например, газета, данные загружаются. Однако мой локальный сервер не работает => результаты кешируются ...

Mr. Blonde 14.05.2018 10:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
252
0

Другие вопросы по теме