Отключить CORS из-за проблем с ошибками 405 - PullRequest
0 голосов
/ 07 июня 2018

Фон:

У меня тонкий API-интерфейс, созданный и в настоящее время работающий в локальном домене, например localhost / api

У меня мобильное приложение, использующее ионную инфраструктуру (основано наangular) и иметь следующий код, использующий httpClient как http:

let accessurl = this.general.apiURL + '/v2/update/status/' + this.machineToChange;
    const headers = new HttpHeaders()
      .set('Authorization', 'Bearer: ' + this.general.apiKey);
    this.http.put(accessurl, {
      statusFuelled: 1
    }, { headers: headers }).subscribe(result => {
      console.log(JSON.stringify(result));
    }, err => {
      console.log(JSON.stringify(err));
    });

Я пробовал каждый вопрос переполнения стека, который я мог найти, чтобы позволить slim framework отключить cors, вот только несколько:

$app->options('/update/status/{machineNo}', function ($request, $response) {
  header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
  header('Access-Control-Allow-Credentials: true');
  header('Access-Control-Max-Age: 86400');    // cache for 1 day
  return $response->withStatus(200);
});

Или:

//http://stackoverflow.com/questions/18382740/cors-not-working-php
  if (isset($_SERVER['HTTP_ORIGIN'])) {
      header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
      header('Access-Control-Allow-Credentials: true');
      header('Access-Control-Max-Age: 86400');    // cache for 1 day
  }

  // Access-Control headers are received during OPTIONS requests
  if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

      if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
          header("Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS");

      if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
          header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

      exit(0);
  }

Или:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header('Content-Type: application/json');

Или в .HTACCESS:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header add Access-Control-Allow-Headers: Content-Type

и многих других промежуточных программах, использующих композитор.

Я также запустил код с Slim Website , но безуспешно.

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

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

Если кто-то может помочь, пожалуйста, дай мне знать.

Я использую PHP 5.6 из-за ограничений сервера, поэтому промежуточное ПО, такое как tuupola / cors, не будет работать из-за того, что PHP <7 </p>

Некоторые ошибки:

Броски в Safari: Не удалось загрузить ресурс: предварительный ответ не выполнен

Chrome Throws: ответ на предварительный запрос не прошел проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Origin 'http://localhost:8100' поэтому не допускается.Ответ имеет HTTP-код состояния 405.

Chrome также выбрасывает: ОПЦИИ http://localhost/api/v2/update/status/{ID} 405 (метод не разрешен)

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

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

Я полагаю, что ответ Daan больше подходит для других, имеющих эту проблему, однако, поэтому отметим это как правильное.

0 голосов
/ 07 июня 2018

Отправьте заголовок с ответом:

return $response
        ->withHeader('Access-Control-Allow-Origin', '*')
        ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
        ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');

См. Также тонкую документацию: https://www.slimframework.com/docs/v3/cookbook/enable-cors.html

...