2016-02-19 2 views
0

Этот вопрос задан несколько раз и ответил также, однако я пытаюсь реализовать предложенный подход, но никуда не буду. Это типичная проблема CORS. За исключением моего случая, я хочу иметь возможность использовать localhost или my pc IP в браузере. Если моя конфигурация настроена на использование IP-адреса, использование localhost дает мне ошибку CORS и наоборот. Любые рекомендации приветствуются. Примечание: Пожалуйста, игнорируйте различные IP-адреса в моем скриншоте и тексте.Нужно исправить синтаксис Extjs для реализации решения CORS с использованием Ext.Ajax.Request

Не удалось загрузить ресурс: сервер ответил со статусом 405 (Method Not Allowed) локальный /: 1 XMLHttpRequest не может загрузить http://192.168.1.2/ARES/store/1.0/core/rest/authenticate/-99/-99. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Следовательно, исходный «http://localhost» не допускается. В ответе был код статуса HTTP 405.

Мой код выглядит так: Я не могу найти способ правильно настроить заголовок Разрешить-Происхождение.

Ext.Ajax.request({ 
        url: url, 
        timeout: 2000, 
        cors: true,    
        method: 'GET', 
        headers: {     
         'Access-Control-Allow-Origin': 'http://localhost/' 
        }, 
        success: function(response, options) { 
         Ext.getBody().unmask(); 
         Manager.app.fireEvent('showLoginView'); 
        }, 
        failure: function(response, options) { 
         Ext.getBody().unmask(); 
        } 
       }); 

Когда я запустить его в браузере я вижу заголовки запросов, как показано ниже:

Request Headers Request

ответ

0

Это делается в конце webservice: так я достиг этого: следующий код идет в файле Global.asax. Надеюсь, это поможет кому-то.

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 

     if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
     { 
      //These headers are handling the "pre-flight" OPTIONS call sent by the browser 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS,PUT, DELETE"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
      HttpContext.Current.Response.End(); 
     } 
    } 
0

От Mozilla Developer Network:

Стандартные работы Cross-Origin совместного использования ресурсов по добавление новых HTTP-заголовков, которые позволяют серверам описать набор источников s, которым разрешено читать эту информацию с помощью веб-браузера.

Акцент на меня.

Вы не сможете установить клиентскую сторону заголовков CORS, потому что они являются средством против использования на стороне клиента. Любой пользователь сможет взаимодействовать со своим кодом на стороне клиента, поэтому каждая мера безопасности должна быть серверной.

Используемый заголовок, Access-Control-Allow-Origin, должен использоваться как заголовок ответа HTTP, а не заголовок запроса. Ответ, как правильно его реализовать, зависит от используемого бэкэнд-языка/фреймворка, с которым вы должны задать другой вопрос.

Но если я правильно понимаю ваш вопрос, вы работаете только с localhost AKA 192.168.x.y, и у вас есть проблемы с «межсайтовыми запросами» между именем хоста и IP. Использование относительного URL-адреса должно быть решением. Вместо url:"http://localhost/ARES/store/1.0/core/rest/authenticate/-99/-99" или url:"http://192.168.1.2/ARES/store/1.0/core/rest/authenticate/-99/-99" вы должны использовать url:"../ARES/store/1.0/core/rest/authenticate/-99/-99".

+0

Интересно.Я думал, что это должен быть ответ. Спасибо за это. Однако есть ли что-то, что необходимо задать стороне клиента в запросе для сервера – aMazing

+0

В общем, ничего не требуется с клиентской стороны. В зависимости от используемой структуры YMMV. – Alexander

+0

Перечитайте свой вопрос и обновите мой пост ... – Alexander

1

или просто создать ярлык для хрома с

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security 

это откроет хром с флагом блокировки-веб-безопасности и ваш запрос будет получить доступ к серверу без проблем и дополнительных «OPTIONS» Методы

+0

Спасибо. Однако это не оптимально, потому что я не знаю побочных эффектов этого. Особенно, когда приложение будет использоваться в производстве клиентами. По внешнему виду это «отключает безопасность в Интернете». – aMazing

+0

Для настройки клиента это плохая идея. Прежде всего, вы заставите своего клиента использовать хром, а не firefox или Internet explorer. Во-вторых, это функция только для разработчиков, которая может быть изменена без предварительного уведомления. Программы не должны полагаться на функции разработчика Chrome. – Alexander

+0

Thats, вероятно, правильно, потому что некоторые клиенты используют IE. Поэтому это решение не может быть использовано. – aMazing

 Смежные вопросы

  • Нет связанных вопросов^_^