Я пытаюсь настроить небольшой сервер Silex RESTFul, и теперь я играю с HTTP-заголовками.Silex дает пустой ответ, если код состояния HTTP! = 200
Один GET функция проверяет If-Modified-Since заголовка и сравнивает с Last-Modified элемента базы данных.
Вот небольшой пример кода:
if($hasModifications){
$response = [items]
$statusCode = 200;
} else {
$response = ['result'=>'no modifications'];
$statusCode = 304;
}
return $app->json($response,$statusCode,$headers);
Когда $ StatusCode = 200, я только получаю пустую страницу, а также не специальный заголовок не отправляется!. Это также нарушает CORS, потому что я не могу установить заголовок Access-Control-Allow-Origin.
Должен ли я делать это по-другому?
(PS: это не реальный код, а также, если я заменю $ StatusCode за 200, то все работает снова, как обычно)
Update: До сих пор, я думаю, от чего я 'читал, что 304 статусов не должны посылать что-либо на тело ответа. Но как насчет заголовков? Если я не соглашусь с CORS, тогда Frontbound у меня не получится, и я не смогу поймать исключение «Not Modified» !. Очевидно, я могу понять это по-другому. Но было бы неплохо, если бы я мог нормально работать (REST + CORS).
Update 2:
var_dump($headers)
array(4) {
["Last-Modified"]=> string(29) "Fri, 21 Aug 2015 22:47:53 GMT"
["X-Status-Code"]=> int(304)
["Cache-Control"]=> string(25) "post-check=0, pre-check=0"
["Pragma"]=> string(8) "no-cache"
}
Обратите внимание, что я использую X-Status-Code сообщить истинную HTTP статуса. Прямо сейчас, ответ строка кода выглядит следующим образом:
return $app->json($response,200,$headers);
Если я изменил на , я не могу видеть вывод var_dump (дает мне пустую страницу). Также, если я установил статус 304 без параметра заголовка, он все тот же. Похоже возвращение или $ app-> JSON очищает HeaderBag, так как я использую JDesrosiers \ Silex \ Provider \ CorsServiceProvider(), и эти параметры заголовков также списываться.
Это ответ Raw HTTP взят из Firefox с кодом состояния :
Cache-Control: post-check=0, pre-check=0, private
Connection: Keep-Alive
Date: Sat, 22 Aug 2015 19:52:18 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.7 (Ubuntu)
И это, с кодом состояния :
Cache-Control: post-check=0, pre-check=0, private
Connection: Keep-Alive
Content-Length: 25
Content-Type: application/json
Date: Sat, 22 Aug 2015 19:53:12 GMT
Keep-Alive: timeout=5, max=100
Last-Modified: Fri, 21 Aug 2015 22:47:53 GMT
Pragma: no-cache
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.11
X-Status-Code: 304
Вы можете разместить вывод '' '' var_dump ($ headers) '' '? – mTorres
Добавлен var_dump ($ headers), некоторые другие тесты и исходные ответы HTTP в обоих случаях (200 и 304) в редакции. – Padlite