2016-09-06 5 views
0

Я знаю, что есть много других статей по этой теме, но, к сожалению, ни один из решений не работал для меня.Запрос на перекрестный запрос Заблокирован при отправке POST на api

Я запускаю linux red hat 7.2 с apache 2.4 (httpd). Я работаю на сервере напрямую как localhost. API основан на python, на котором у меня мало опыта - я загрузил программу из github mozilla http observatory.

Я пробовал разные настройки в течение нескольких часов и не добился прогресса в этом вопросе и теперь ищу дополнительную помощь.

Главная страница, прежде чем я на перед тем POST является http://localhost

Вот это JS (AJAX)

POST-XHR вызов на: http://localhost:57001/api/v1/scan

function loadTLSObservatoryResults(rescan, initiateScanOnly) { 
    'use strict'; 

    var rescan = typeof rescan !== 'undefined' ? rescan : false; 
    var initiateScanOnly = typeof initiateScanOnly !== 'undefined' ? initiateScanOnly : false; 

    /*var SCAN_URL = 'https://tls-observatory.services.mozilla.com/api/v1/scan'; 
    var RESULTS_URL = 'https://tls-observatory.services.mozilla.com/api/v1/results'; 
    var CERTIFICATE_URL = 'https://tls-observatory.services.mozilla.com/api/v1/certificate';*/ 
    var SCAN_URL = 'http://localhost:57001/api/v1/scan'; 
    var RESULTS_URL = 'http://localhost:57001/api/v1/results'; 
    var CERTIFICATE_URL = 'http://localhost:57001/api/v1/certificate'; 

    // if it's the first scan through, we need to do a post 
    if (Observatory.state.third_party.tlsobservatory.scan_id === undefined || rescan) { 
     // make a POST to initiate the scan 
     $.ajax({ 
      data: { 
       rescan: rescan, 
       target: Observatory.hostname 
      }, 
      initiateScanOnly: initiateScanOnly, 
      dataType: 'json', 
      method: 'POST', 
      error: function() { errorResults('Scanner unavailable', 'tlsobservatory') }, 
      success: function (data) { 
       Observatory.state.third_party.tlsobservatory.scan_id = data.scan_id; 

       if (this.initiateScanOnly) { return; } 

       loadTLSObservatoryResults(); // retrieve the results 
      }, 
      url: SCAN_URL 
     }); 

Здесь является моим httpd.conf

basicall у только что включили эту строку: LoadModule headers_module modules/mod_headers.so

Вот мой файл .htaccess:

RewriteEngine On 

Header always set Access-Control-Allow-Origin "*" 
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 
Header always set Access-Control-Max-Age "1000" 
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token" 

RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L] 

Я перезапуске Apache, но я вижу такое же предупреждение в консоли разработчика:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:57001/api/v1/scan. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

+0

почему 'python' там есть? –

ответ

0

Из любопытства вы используете среду сборки Javascript, например, Ember или Angular на стороне клиента? Поскольку это повлияет на ваш размещенный порт и может способствовать ошибкам, связанным с перекрестным происхождением.

Другая вещь, которую вы могли бы сделать, это немного изменить свой Аякса и создать функцию helpder, как так:

function myCallbackFunction(data){ 
      Observatory.state.third_party.tlsobservatory.scan_id = data.scan_id; 

      if (this.initiateScanOnly) { return; } 

      loadTLSObservatoryResults(); // retrieve the results 

    } 



    // make a POST to initiate the scan 
    $.ajax({ 
     data: { 
      rescan: rescan, 
      target: Observatory.hostname 
     }, 
     initiateScanOnly: initiateScanOnly, 
     dataType: 'jsonp', 

     method: 'POST', 
     error: function() { errorResults('Scanner unavailable', 'tlsobservatory') }, 
     jsonpCallback: 'myCallbackFunction' 
     url: SCAN_URL 
    }); 

Попробуйте это и дайте мне знать, если он работает для вас.

+0

Можете ли вы взглянуть на мое сообщение. Я обновил его, включив в него полную функцию, в случае, если это означает что-то еще для вас – user3436467

+0

предупреждение cors прошло, но переход на jsonp, похоже, каким-то образом изменил его на вызов GET .. по крайней мере, в соответствии с консолью разработчика. – user3436467

+0

Полезные грузы Yea jsonp - GET. Тест $ .ajax ({ данные: { Пересканировать: пересканировать, цель: Observatory.hostname }, initiateScanOnly: initiateScanOnly, Datatype: ложь, ProcessData, ложно, метод: «POST », CONTENTTYPE: ложь, ошибка: функция() {errorResults ('сканер недоступен', 'tlsobservatory')}, jsonpCallback: 'myCallbackFunction' URL: SCAN_URL }); –

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