Я запускаю локальный клиент 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, но по какой-то причине на этот раз я не могу обойти является проблемой.
Есть идеи, как решить эту проблему?