Почему мой 404 возвращает код состояния 200?

Не знаю, почему, но все мои страницы с ошибками отвечают 200. Мне это кажется немного странным, страницы существуют, но разве они не должны иметь соответствующие коды состояния? Как заставить Nginx отображать мои страницы 404 с кодом состояния 404?

Например:

▶ curl -I http://example.com/404
HTTP/1.1 200 OK <<--------------------------- WTF! THIS SHOULD BE 404!!
Server: nginx/1.8.0
Date: Tue, 17 Apr 2018 02:24:04 GMT
Content-Type: text/html; charset=UTF-8
...

Вот соответствующая часть моей конфигурации:

server {

listen 80 default_server;

server_name example.com;
root /var/www/example/static;
index index.html;

try_files $uri $uri/ $uri.html =404;

# error pages
error_page 400 =400 /400; # bad request
error_page 401 =401 /401; # unauthorized
error_page 403 =403 /403; # forbidden
error_page 404 =404 /404; # not found
error_page 408 =408 /408; # timeout
error_page 500 502 503 504 =500 /500; # error

} 

В документации указано:

... можно изменить код ответа ... с использованием синтаксиса «= ответ»

Это правда, что страница существует, но установка error_page в конфигурации должна изменить статус этой страницы. Например, если вы скручиваете Google 404, вы получите правильный результат:

curl -I https://www.google.com/404
HTTP/2 404  <<--------------------------- Ahhh, much better.
content-type: text/html; charset=UTF-8
referrer-policy: no-referrer
content-length: 1564

Мне нужна моя страница 404 для выдачи кода состояния 404, поскольку я перенаправляю на нее из других частей своего приложения. Это хорошо для людей, но плохо для машин, поскольку перенаправление дает 302, за которым следует 200 вместо 404.

0
задан 17 April 2018 в 21:08
2 ответа

Как сказано в комментарии joeqwerty, nginx правильно возвращает 200, потому что вы запросили существующий документ. Вы получите 404 только в том случае, если вы запросите документ, который не существует . Попробуйте сделать это вместо этого. (И существует ли такой документ на каком-то другом сервере, совершенно неважно.)

4
ответ дан 4 December 2019 в 11:25

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

В предыдущем ответе было сказано правильно, когда вы перетаскиваете страницу 404 в ее подлинное место, она вернет 200, потому что вы запросили существующую страницу.

1
ответ дан 4 December 2019 в 11:25

Теги

Похожие вопросы