Пройдя этот быстрый пример запроса GET
из Angular2
в файл PHP
я продолжаю получать –
Ошибка 304
Я тестирую разницу между использованием node
и php
для задней части app
angular2
. У меня есть простой GET
который пытается получить небольшой объем данных из файла php
.
Запрос, кажется, идет хорошо, но файл не предоставляется в приложение.
304 NOT MODIFIED Получен условный запрос GET или HEAD и вызвал бы ответ 200 OK, если бы не тот факт, что условие было оценено как false.
Другими словами,
нет необходимости передавать серверу представление целевого ресурса, поскольку запрос указывает, что клиент, который сделал запрос условным, уже имеет действительное представление; поэтому сервер перенаправляет клиент, чтобы использовать это сохраненное представление, как если бы оно было полезной нагрузкой ответа 200 OK.
CORS
У меня есть CORS
разрешенный внутри express app.js
файла express app.js
У меня есть CORS
в PHP
файле.
Как я могу решить эту проблему? Мне хотелось бы, по крайней мере, ng2
данные со стороны ng2
.
Примеры кода
PHP // Запуск на порт Apache 80 @ api.example.com
<?php header("Access-Control-Allow-Origin: *"); $data = array( array('id' => '1','first_name' => 'Cynthia'), array('id' => '2','first_name' => 'Keith'), array('id' => '3','first_name' => 'Robert'), array('id' => '4','first_name' => 'Theresa'), array('id' => '5','first_name' => 'Margaret') ); echo json_encode($data); ?>
Angular2 // Работа на Express Server @ localhost: 4200
import {Http, Response} from '@angular/http'; import {Injectable, Component } from '@angular/core'; @Component({ selector: 'my-app', template: `<ul> <li *ngFor="let person of data"> {{person.id}} - {{person.first_name}} </li> </ul>` }) export class AppComponent { private data; constructor(private http:Http){ } ngOnInit(){ this.getData(); } getData(){ this.http.get('api.example.com/index.php') .subscribe(res => this.data = res.json()); } }
Я попытался изменить функцию getData()
которая не сработала. Совсем недавно это,
getData(){ let url = 'api.example.com/index.php'; let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); this.http.get(url, options) .subscribe(res => { this.data = res.json(); console.log(this.data); }); }
У меня была аналогичная проблема, но я смог ее исправить, установив следующие заголовки в сценарии api;
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 принимаются во время запросов OPTIONS
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); }
Надеюсь, поможет