Angular 9 (работает с --proxy-config) POST возвращает 301, затем OPTIONS, затем GET не отправляет тело POST на сервер - PullRequest
0 голосов
/ 05 августа 2020

Я запускаю локальный клиент angular 9 в режиме разработки и пытаюсь отправить сообщение на внутренний ресурс PHP. Изначально у меня были проблемы с CORS, поэтому в файле PHP я добавил:

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");

, а также начал использовать прокси на стороне клиента:

{
    "/awana-record-keeping/server/*": {
        "target": "http://bridgewaycc.org/site",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug"
    }
}

CORS ошибки исчезли в консоли Chrome. Однако теперь я вижу следующую последовательность сетевых вызовов:

http://stevewarsa.com/all-calls.png

Сначала идет вызов POST, который приводит к коду ответа 301 (который я полагаю, исходит от локального angular прокси):

http://stevewarsa.com/first-call.png

Во-вторых, есть вызов GET, который не отправляет полезные данные запроса и который приводит в коде ответа 200:

http://stevewarsa.com/second-call.png

В-третьих, есть вызов OPTIONS, который приводит к 200:

http://stevewarsa.com/third-call.png

В результате сценарий PHP не получает данные публикации и, следовательно, не может вернуть запрошенные данные.

Примечание - 3 вызова, показанные на вкладке сети из Chrome являются результатом одного вызова http post в angular:

  ngOnInit() {
    this.awanaService.getClubbersByYear(<YearRange>{startYear: 2020, endYear: 2021}).subscribe(clubbers => {
      console.log("Here are the clubbers:");
      console.log(clubbers);
    });
  }

Вот awanaService:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { YearRange } from './year-range';

@Injectable({
  providedIn: 'root'
})
export class AwanaService {
  private _uri = "/awana-record-keeping/server/";

  constructor(private httpService:HttpClient) { }

  public getClubbersByYear(yearRange: YearRange) {
    return this.httpService.post<string[]>(`${this._uri}get-clubbers-by-year-range.php`, yearRange);
  }
}

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

Есть идеи, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...