Возможная проблема CORS с приложением Windows - PullRequest
0 голосов
/ 07 мая 2018

У меня есть проект 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, приложение начинает получать данные, то есть данные возвращаются при каждом запросе.

Developer tools Screenshot

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

Существуют ли какие-либо специальные настройки, которые я мог бы не установить для Windows в Cordova?

Редактировать: Вот некоторый простой источник, который выходит из строя в той же манере. Чтобы воспроизвести, создайте пустой проект 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).

...