2015-11-21 2 views
0

Я видел несколько примеров здесь, в Stackoverflow, но ничего не работает.Проблемы с перекрестным доменом Запрос CORS

Я использую PHP для серверной и Backbone.js на переднем конце. Я могу делать запросы GET и POST, но не могу заставить PUT или DELETE работать.

Я не уверен на 100%, где лучшее место для размещения заголовков. Я их в двух местах. Один в файле .htaccess следующим образом.

#Header always set Access-Control-Allow-Origin "http://www.fitnesstimer.dev"     
#Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS" 
#Header always set Access-Control-Allow-Headers "origin, x-requested-with, Content-Type,X-Custom-Header" 
#header always set Access-Control-Allow-Credentials "true" 

Тогда в заголовке моего контроллера у меня есть это.

header('Access-Control-Allow-Origin: http://www.fitnesstimer.dev'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); 
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, X-Custom-Header'); 
header('Access-Control-Allow-Credentials: true'); 

Мой вызов AJAX выглядит следующим образом.

 $.ajax({ 
     type: 'PUT', 
     url: 'http://www.fitnesstimerapi.dev/user/deleteuser/' + userId, 
     contentType: "application/json", 
     xhrFields: {withCredentials: true }, 
     dataType: "text", 
     success: function() { 
      alert( 'User removed!'); 
     }, 
     error: function(err) { 
      console.log("ERROR: ", err); 
     } 
    }); 

Я пробовал как PUT, так и DELETE как тип, и ни один из них не работает. Я получаю следующую ошибку.

XMLHttpRequest cannot load http://www.fitnesstimerapi.dev/user/deleteuser/11. Response for preflight has invalid HTTP status code 404 

Любая помощь была бы принята с благодарностью. Пожалуйста, не просто свяжите меня с какой-то документацией, потому что я прочитал все обо всем. Я много искал и читал, прежде чем решил приехать сюда и просто спросить.

Спасибо!

+0

Упоминание «предполетный» в ошибке означает, что браузер отправляет команду «ОПЦИИ» и не получает ответ, который он ожидает от вашего сервера. Правильно ли ваш PHP реализует запрос «ОПЦИИ» как часть поддержки CORS? – jfriend00

+0

Я уверен, что это не так, и я не знаю, как это сделать. –

+0

О, DUDE, вы помогли просто сказать: «Правильно ли ваш PHP выполняет запрос« ОПЦИИ »как часть вашей поддержки CORS?» Я смог выполнить поиск на основе этого, и я нашел эту ссылку. http://www.dinochiesa.net/?p=754 –

ответ

0

Благодаря jfriend00, я нашел ответ.

Я добавил это в свой файл index.php.

// respond to preflights 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    // return only the headers and not the content 
    // only allow CORS if we're doing a GET - i.e. no saving for now. 
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && 
    $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'GET' && 
    isset($_SERVER['HTTP_ORIGIN']) && 
    is_approved($_SERVER['HTTP_ORIGIN'])) { 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Allow-Headers: X-Requested-With'); 
} 
exit; 

}

Спасибо, что работал!

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