Error header что значит

Отключаем PEK файлы 45. Можно принудительно отключить отображение звуковой волны во всем проекте. Нажимаем комбинацию клавиш: Ctrl+F12 (Windows) или

Содержание

  1. Отключаем PEK файлы
  2. Как исправить ошибку «Файл не открывается из-за ошибки заголовка» в Adobe Premiere
  3. Содержание
  4. Что вызывает сообщение «Невозможно открыть файл из-за ошибки заголовка» в Adobe Premiere?
  5. Решение 1.Измените расширение файла изображения
  6. Эти Интернет-магазины предоставят вам неопубликованные скидки, если вы откажетесь от своей корзины
  7. Читать дальше
  8. Скачать официальный микстейп Star-Lord бесплатно
  9. Читать дальше
  10. Как получить членство в Amazon Prime всего за $ 67
  11. Обработка ошибок в Express
  12. Обработка синхронных ошибок
  13. Обработка асинхронных ошибок
  14. Написание собственного обработчика ошибок
  15. ▍Код состояния ответа, используемый по умолчанию
  16. ▍Изменение кода состояния ошибки
  17. ▍Обработка ошибок 404
  18. ▍Замечания об ошибке ERR_HTTP_HEADERS_SENT
  19. ▍Обработка ошибок и потоковая передача данных
  20. Итоги

Отключаем PEK файлы

45. Можно принудительно отключить отображение звуковой волны во всем проекте. Нажимаем комбинацию клавиш: Ctrl+F12 (Windows) или Cmd+F12 (для MacBook Cmd+Fn+F12) и в панеле Console, переключаемся на режим Debug Database View и пункте SuppressPeakFileGeneration вместо false вбиваем true. Перезагружаем программу Adobe Premiere Pro CS6.

Смотрим на результат таких манипуляций:

В более старших версиях (например: Adobe Premiere Pro CC 2019) можно просто снять галку перед пунктом Показать звуковую волну (Show Audio Waveform), для отключения отображения звуковой волны.

46. Ошибка PProHeadless has encountered an error. [….SrcWinWinFile.cpp-814] возникает при экспорте таймлайна. Она может возникать если один из клипов/музыкальных треков на таймлайне поврежден, хотя и проигрывается нормально в различных проигрывателях на ПК. Можно попробовать перекодировать данное видео/аудио в другой формат. Может возникать при смешивании нативного видео с контентом скачанного с Youtube и т.п. финальными релизами.

47. Ошибка при работе с OpenGL или низкая производительность. При настройке Dynamic Switchable Graphics (Динамическое переключение видеокарт) в Catalyst Control Center (с дискретной графикой AMD) ноутбук может не разрешить приложениям OpenGL быть привязанным к дискретной или высокопроизводительной видеокарте. Приложения OpenGL будут использовать энергоэффективную или встроенную видеокарту, но уровень производительности может не достигнуть ожиданий.
OpenGL не поддерживается на дискретной видеокарте при использовании функции динамического переключения видеокарт. Чтобы обеспечить работу дискретной видеокарты для приложений OpenGL, необходимо отключить функцию динамического переключения видеокарт и включить функцию переключения видеокарт в режиме фиксированного управления.
48. Ошибка при захвате HDV видео. При использовании HDV захвата видео с камкордеров: Canon XH A1, Canon HV20, HV30, HV40 на платформе Mac OS X 10.7.5, вылезает ошибка. Корректно работает только на Adobe Premiere Pro CS6 без установленных обновлений.

49. Error compiling movie. Disk full (Ошибка компиляции фильма. Диск переполнен). Обычно ошибка означает, что заканчивается физическое дисковое пространство. Т.е. диск не может записать полностью целевой файл, табличка с ошибкой возникает не сразу после начала экспорта, а в момент, когда дисковое пространство закончилось.
Освобождаем место на жестком диске, на который производится экспорт или выбираем жесткий диск с достаточным количеством свободного пространства.
Но бывает и такой вариант, ошибка появляется при экспорте AVCHD 2.0 видео (дискового пространства на целевом диске достаточно) при установленной галке «Match sequence settings» (т.е. выводе видео с частотами кадров 1080p50/60). Можно попробовать вывести материал с частотой кадров: 50i / 60i.
50. Ошибка Прекращена работа программы «Adobe Premiere Pro CS6» или Прекращена работа программы «Adobe Media Encoder CS6» или Adobe Media Encoder cs6 error 0xc000007b при загрузке приложений (или отправке видео из Adobe Premiere Pro в Adobe Media Encoder). Ошибка связана с модулем MSVCR100.dll который является составной частью распространяемого пакета Visual C++ для Visual Studio. Он например может быть подменен при установке iLivid и заражении Adware вирусом iLivid Virus. Длл-ка живет в следующей директории: C:Windowssystem32MSVCR100.dll (а в карантин антивирусники отправляют файл C:UsersMichailAppDataLocaliLividMSVCR100.dll). В итоге мы получаем следующие подробности об ошибки:
Faulting application path: C:Program Files (x86)AdobeAdobe Media Encoder CS6Adobe Media Encoder.exe.
Faulting module path: C:WindowsSYSTEM32MSVCR100.dll.
Faulting application path: C:Program FilesAdobeAdobe Premiere Pro CS6Adobe Premiere Pro.exe.
Faulting module path: C:Windowssystem32MSVCR100.dll.
Чтобы исправить ошибку при загрузке, копируем файлы: msvcr100.dll & msvcr80.dll из директории С:/Program Files/Adobe/Adobe After Effects CS6/Support Files в директорию С:/Program Files/Adobe/Premiere Pro CS6.

51. Ошибка при импорте видео/аудио/изображений, File Import Failure. The file cannot be opened because of a header error (Ошибка импорта файла. Файл не может быть открыт из-за ошибки заголовка). Это ошибка заголовка файла, т.е. при импорте Adobe Premiere Pro читает и переписывает метаданные контейнера, и это может делать с ошибками (необходимо на будущее отключать эту функцию в настройках программы). Соответственно, наша задача либо поменять контейнер в каком-нибудь демуксере (без перекодирования), либо открыть и сохранить файл в другой программе. Можно попробовать сменить расширение у видео.

Для фото файлов: неподдерживаемое цыетовой пространство (CMYK и т.д.), повреждение самого файла.
Популярна ошибка с JPEG файлами, она встречается и в фотошопе, подробнее как исправить читаем здесь. И Photoshop и Premiere Pro очень чувствительны к некорректным заголовкам JPEG.
52. Adobe Media Encoder. Невозможно записать данные XMP в выходной файл. При экспорте видео получаем 1 файл размером 24Кбайта. Ошибка получается в момент мультиплексирования. Т.е. при экспорте создаются два файла, например: 001.9772.95521 с разширением: звук (ADTS) .aac и видео (MP4) .m4v. И при помещении (muxing) этих файлов в контенейр .mp4 и возникает ошибка. Причины: недостаточно места на диске (целевом или системном), ошибка метаданных и т.д. После успешного или неуспешного муксинга, промежуточные файлы аля 001.9772.95521 удаляются.
53. File Import Failure. Error Message. The file cannot be opened because it is under rights management. Данная ошибка связана с тем, что .TS файл содержит защиту от копирования, управление цифровыми правами и т.д. (скорее всего это может быть аудио файл в .ts контейнере.
С данной ошибкой также связаны следуюшие сообщения:
Cannot load the specified file. It may be protected, unsupported or corrupted.
File format not supported. One of the necessary components may not have been installed.
One or more files were not imported because there were problems reading them.
The selected file cannot be played because your system does not have the required compressor/decompressor (codec) installed.
Unable to add the audio file. The selected file cannot be played because your system does not have the required compressor/decompressor or the codec is not installed.
The software that’s used to decode the media is not available on this system. Installing the correct decoders for the files you are working with may help to correct the problem.
AEGP Plugin AAF: Error occurred while creating project. (5027::12).
AEGP Plugin WindowsMedia Import: Error reading Windows Media file. WMImport error: 0x3 (5027::12).
54. Ошибка рендера APPCRASH. Сбойный модуль (Faulting module path): C:Program FilesAdobeAdobe Media Encoder CS6mc_enc_avc.dll или Faulting module path: C:Program FilesAdobeAdobe Premiere Pro CS6mc_enc_avc.dll.
Решение проблемы: в месте где появляется ошибка может находиться фотография большого размера (можно ее в фотошопе подогнать под размер кадра) или аппаратная проблема с разогнанным процессором и т.д.

Читаем далее про ошибки в Adobe Premiere Pro CC.

Источник

Как исправить ошибку «Файл не открывается из-за ошибки заголовка» в Adobe Premiere

Содержание

Adobe — транснациональная компания, которая больше всего известна своими мультимедийными продуктами. Эти продукты предлагают очень обширный список функций, которые используются в современном мире развлечений. Adobe Premiere и Photoshop до сих пор являются самыми известными и используемыми продуктами Adobe. Возможности, предлагаемые в Photoshop, не имеют себе равных. Между тем, Adobe Premiere не на шаг отстает в мире программного обеспечения для редактирования видео. Хотя эти двое преуспевают в том, что они делают, определенные проблемы с ними часто беспокоят пользователей. Одна из проблем, с которыми вы можете столкнуться при использовании Adobe Premiere, — это «Файл не открывается из-за ошибки заголовка‘ сообщение об ошибке.

Сообщение об ошибке обычно появляется, когда вы пытаетесь импортировать изображения в Premiere. Это может быть связано с несколькими причинами, одна из которых — неправильный формат расширения файла. Тем не менее, с указанным сообщением об ошибке можно легко справиться с помощью нескольких простых решений, которые мы предоставим ниже. Они также устранили проблему для других.

Что вызывает сообщение «Невозможно открыть файл из-за ошибки заголовка» в Adobe Premiere?

Как мы уже упоминали, ошибка возникает, когда вы используете импортер для импорта файлов изображений в Adobe Premiere. Это может быть вызвано следующими факторами —

  • Расширение файла изображения: Для большинства пользователей проблема была вызвана расширением файла изображения. Это можно исправить, изменив расширение файла изображения.
  • Цветовой режим изображения: Сообщение об ошибке также может быть вызвано тем, что изображения, которые вы пытаетесь импортировать, имеют CMYK или другие цветовые режимы. Чтобы решить эту проблему, вам понадобится Photoshop для изменения цветового режима изображений.
  • Изображение повреждено: Другой причиной ошибки может быть повреждение файла образа. Если загружаемое изображение повреждено или повреждено, вы можете получить указанное сообщение об ошибке. В таком случае вам просто нужно будет использовать другое изображение.

Теперь, когда вы знаете причины указанного сообщения об ошибке, давайте перейдем к решениям, которые вы можете реализовать для устранения ошибки. Пожалуйста, попробуйте следовать им в том же порядке, что и указано.

Решение 1.Измените расширение файла изображения

Сообщение об ошибке иногда может быть вызвано форматом файла изображения .JPEG. У большинства пользователей была эта проблема, и она была решена после того, как они изменили расширение файла изображения. Поэтому, чтобы решить эту проблему, просто измените расширение изображения с .JPEG на .PNG. Вот как это сделать:

  1. Чтобы изменить расширение, убедитесь, что значок ‘Скрывать расширения для известных типов файлов‘Опция не отмечена.
  2. Для этого откройте Проводник.
  3. Нажмите на файл в правом верхнем углу и выберите «Изменить папку и параметры поиска’.
  4. Переключитесь на Посмотреть вкладка и снимите флажок «Скрывать расширения для известных типов файлов’.
  5. Нажмите Подать заявление а затем нажмите хорошо.
  6. Теперь перейдите в каталог, в котором находятся файлы изображений, и измените расширение с .webp «>
  7. Сохраните файл изображения.
  8. Посмотрите, поможет ли это решить проблему.

Эти Интернет-магазины предоставят вам неопубликованные скидки, если вы откажетесь от своей корзины

Покупки в Интернете могут быть такими же легкими, как покупка сигар в Мексике. Вы найдете то, что вам нравится, спросите цену и уйдете. «Мой друг! Вернись! Я даю тебе скидку 10%. Только для тебя&.

Читать дальше

Скачать официальный микстейп Star-Lord бесплатно

стражи Галактики был одним из крупнейших кассовых хитов 2014 года, и это благодаря великолепному составу персонажей и отличной музыке. Микстейп Звездного Лорда был подарен ему его матерью и послужил о.

Читать дальше

Как получить членство в Amazon Prime всего за $ 67

Amazon Prime — это сервис годовой подписки, который предлагает бесплатную двухдневную доставку, а также бесплатную потоковую передачу каталога Amazon Video фильмов и телепередач, который включает в се.

Источник

Обработка ошибок в Express

Когда я только начинал работать с Express и пытался разобраться с тем, как обрабатывать ошибки, мне пришлось нелегко. Возникало такое ощущение, будто никто не писал о том, что мне было нужно. В итоге мне пришлось самому искать ответы на мои вопросы. Сегодня я хочу рассказать всё, что знаю об обработке ошибок в Express-приложениях. Начнём с синхронных ошибок.

Обработка синхронных ошибок

Если вам нужно обработать синхронную ошибку, то вы можете, для начала, с помощью инструкции throw , выдать такую ошибку в обработчике запроса Express. Обратите внимание на то, что обработчики запросов ещё называют «контроллерами», но я предпочитаю использовать термин «обработчик запросов» так как он кажется мне понятнее.

Вот как это выглядит:

Такие ошибки можно перехватить с помощью обработчика ошибок Express. Если вы не написали собственный обработчик ошибок (подробнее об этом мы поговорим ниже), то Express обработает ошибку с помощью обработчика, используемого по умолчанию.

Вот что делает стандартный обработчик ошибок Express:

  1. Устанавливает код состояния HTTP-ответа в значение 500.
  2. Отправляет сущности, выполнившей запрос, текстовый ответ.
  3. Логирует текстовый ответ в консоль.

Сообщение об ошибке, выведенное в консоль

Обработка асинхронных ошибок

Для обработки асинхронных ошибок нужно отправить ошибку обработчику ошибок Express через аргумент next :

Вот что попадёт в консоль при логировании этой ошибки.

Сообщение об ошибке, выведенное в консоль

Если вы пользуетесь в Express-приложении конструкцией async/await, то вам понадобится использовать функцию-обёртку, наподобие express-async-handler. Это позволяет писать асинхронный код без блоков try/catch. Подробнее об async/await в Express можно почитать здесь.

После того, как обработчик запроса обёрнут в express-async-handler , то можно, так же, как было описано выше, выбросить ошибку с использованием инструкции throw . Эта ошибка попадёт к обработчику ошибок Express.

Сообщение об ошибке, выведенное в консоль

Написание собственного обработчика ошибок

Обработчики ошибок Express принимают 4 аргумента:

  1. error
  2. req
  3. res
  4. next

Размещать их нужно после промежуточных обработчиков и маршрутов.

Если создать собственный обработчик ошибок, то Express прекратит использование стандартного обработчика. Для того чтобы обработать ошибку, нужно сформировать ответ для фронтенд-приложения, которое обратилось к конечной точке, в которой возникла ошибка. Это означает, что нужно выполнить следующие действия:

  1. Сформировать и отправить подходящий код состояния ответа.
  2. Сформировать и отправить подходящий ответ.

То, какой именно код состояния подойдёт в каждом конкретном случае, зависит от того, что именно произошло. Вот список типичных ошибок, к обработке которых вы должны быть готовы:

  1. Ошибка 400 Bad Request . Используется в двух ситуациях. Во-первых — тогда, когда пользователь не включил в запрос необходимое поле (например — в отправленной платёжной форме не заполнено поле со сведениями о кредитной карте). Во-вторых — тогда, когда в запросе содержатся некорректные данные (например — ввод в поле пароля и в поле подтверждения пароля разных паролей).
  2. Ошибка 401 Unauthorized . Этот код состояния ответа применяется в том случае, если пользователь ввёл неправильные учётные данные (вроде имени пользователя, адреса электронной почты или пароля).
  3. Ошибка 403 Forbidden . Используется в тех случаях, когда пользователю не разрешён доступ к конечной точке.
  4. Ошибка 404 Not Found . Применяется в тех случаях, когда конечную точку невозможно обнаружить.
  5. Ошибка 500 Internal Server Error . Применяется тогда, когда запрос, отправленный фронтендом, сформирован правильно, но на бэкенде при этом возникла какая-то ошибка.

После того, как определён подходящий код состояния ответа, его нужно установить с помощью res.status :

Код состояния ответа должен соответствовать сообщению об ошибке. Для этого нужно отправлять код состояния вместе с ошибкой.

Легче всего это сделать с помощью пакета http-errors. Он позволяет отправлять в ошибке три фрагмента информации:

  1. Код состояния ответа.
  2. Сообщение, сопутствующее ошибке.
  3. Любые данные, которые нужно отправить (это необязательно).

Вот как установить пакет http-errors :

Вот как этим пакетом пользоваться:

Рассмотрим пример, который позволит как следует в этом всём разобраться.

Представим, что мы пытаемся обнаружить пользователя по адресу его электронной почты. Но этого пользователя найти не удаётся. В результате мы решаем отправить в ответ на соответствующий запрос ошибку User not found , сообщающую вызывающей стороне о том, что пользователь не найден.

Вот что нам нужно будет сделать при создании ошибки:

  1. Установить код состояния ответа как 400 Bad Request (ведь пользователь ввёл неправильные данные). Это будет наш первый параметр.
  2. Отправить вызывающей стороне сообщение наподобие User not found . Это будет второй параметр.

Получить код состояния можно с помощью конструкции error.status , а сообщение ошибки — с помощью error.message :

Результат логирования ошибки в консоли

Затем состояние ответа устанавливают с помощью res.status , а сообщение записывают в res.json :

Лично я предпочитаю отправлять в подобных ответах код состояния, сообщение и результат трассировки стека. Это облегчает отладку.

▍Код состояния ответа, используемый по умолчанию

Если источником ошибки не является createError , то у неё не будет свойства status . Вот пример, в котором сделана попытка прочесть несуществующий файл с помощью fs.readFile :

У такого объекта ошибки не будет свойства status :

Результат логирования ошибки в консоли

В подобных случаях можно задать код ошибки, используемый по умолчанию. А именно, речь идёт об ошибке 500 Internal Server Error :

▍Изменение кода состояния ошибки

Предположим, мы собираемся прочитать некий файл, воспользовавшись данными, предоставленными пользователем. Если такого файла не существует, это значит, что нам нужно выдать ошибку 400 Bad Request . Ведь в том, что файл найти не удаётся, нет вины сервера.

В подобном случае нужно воспользоваться конструкцией try/catch для перехвата исходной ошибки. Затем нужно воссоздать объект ошибки с помощью createError :

▍Обработка ошибок 404

Если запрос прошёл через все промежуточные обработчики и маршруты, но так и не был обработан, это означает, что конечная точка, соответствующая такому запросу, не была найдена.

Для обработки ошибок 404 Not Found нужно добавить, между маршрутами и обработчиком ошибок, дополнительный обработчик. Вот как выглядит создание объекта ошибки 404:

Сведения об ошибке

Не впадайте в панику если видите сообщение об ошибке ERR_HTTP_HEADERS_SENT: Cannot set headers after they are sent to the client . Она возникает из-за того, что в одном и том же обработчике многократно вызывается метод, устанавливающий заголовки ответа. Вот методы, вызов которых приводит к автоматической установке заголовков ответа:

  1. res.send
  2. res.json
  3. res.render
  4. res.sendFile
  5. res.sendStatus
  6. res.end
  7. res.redirect

Так, например, если вы вызовете методы res.render и res.json в одном и том же обработчике ответа, то вы получите ошибку ERR_HTTP_HEADERS_SENT :

В результате, в том случае, если вы сталкиваетесь с этой ошибкой, тщательно проверьте код обработчиков ответа и убедитесь в том, что в нём нет ситуаций, в которых вызывается несколько вышеописанных методов.

▍Обработка ошибок и потоковая передача данных

Если что-то идёт не так при потоковой передаче ответа фронтенду, то можно столкнуться с той же самой ошибкой ERR_HTTP_HEADERS_SENT .

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

Итоги

Сегодня я рассказал вам всё, что знаю об обработке ошибок в Express. Надеюсь, это поможет вам писать более надёжные Express-приложения.

Источник

  • 1
    header error control

    1. контроль ошибок в заголовке
    2. исправление ошибок заголовка

    Англо-русский словарь нормативно-технической терминологии > header error control

  • 2
    header error correction

    1. коррекция ошибок в заголовке

    Англо-русский словарь нормативно-технической терминологии > header error correction

  • 3
    header error check

    1. обнаружение ошибок в заголовке

    Англо-русский словарь нормативно-технической терминологии > header error check

  • 4
    Header Error Control

    Универсальный англо-русский словарь > Header Error Control

  • 5
    header error control

    English-Russian dictionary of modern telecommunications > header error control

  • 6
    header error detection

    English-Russian dictionary of telecommunications and their abbreviations > header error detection

  • 7
    header error control

    English-Russian information technology > header error control

  • 8
    Far End Header Error Check (FHEC)

    контроль ошибок в заголовке на дальнем конце

    English-Russian dictionary of modern telecommunications > Far End Header Error Check (FHEC)

  • 9
    header analysis error byte

    Универсальный англо-русский словарь > header analysis error byte

  • 10
    header compare error

    Универсальный англо-русский словарь > header compare error

  • 11
    header cyclic redundancy control error

    Универсальный англо-русский словарь > header cyclic redundancy control error

  • 12
    header analysis error byte

    English-Russian information technology > header analysis error byte

  • 13
    HEC

    контроль ошибок в заголовке [ячейки ATM]

    Англо-русский толковый словарь терминов и сокращений по ВТ, Интернету и программированию. > HEC

  • 14
    HEC

    проверка заголовков на ошибки

    Англо-русский cловарь терминов и сокращений по мобильной радиосвязи стандарта GSM > HEC

  • 15
    HEC

    Универсальный англо-русский словарь > HEC

  • 16
    HEC

    1. с усиленной эмалевой и однослойной хлопчатобумажной изоляцией (о проводе)
    2. обнаружение ошибок в заголовке
    3. контроль ошибок в заголовке
    4. исправление ошибок заголовка

    Англо-русский словарь нормативно-технической терминологии > HEC

  • 17
    detection

    English-Russian dictionary of telecommunications and their abbreviations > detection

  • 18
    invalid cell

    Универсальный англо-русский словарь > invalid cell

  • 19
    FHEC

    см.

    Far End Header Error Check

    English-Russian dictionary of modern telecommunications > FHEC

  • 20
    HEC

    English-Russian dictionary of telecommunications and their abbreviations > HEC

См. также в других словарях:

  • Header Error Check — ist ein Prüfverfahren bei der Übertragungstechnik Asynchronous Transfer Mode (ATM), mit dem festgestellt wird, ob eine ATM Zelle richtig empfangen wurde. Dazu enthält der Kopf der ATM Zelle (Header) im fünften und letzten Byte eine… …   Deutsch Wikipedia

  • Header Error Correction — The Header Error Correction (HEC) is the last field in the Asynchronous Transfer Mode cell consisting of an 8 bit CRC of the cell s header only. It consists of the remainder of the division of the 32 bits of the header by the polynomial… …   Wikipedia

  • Header Error Control —    In an Asynchronous Transfer Mode (ATM) cell header, an 8 bit field used for detecting errors and correcting single bit errors.    See also Asynchronous Transfer Mode …   Dictionary of networking

  • Error detection and correction — In mathematics, computer science, telecommunication, and information theory, error detection and correction has great practical importance in maintaining data (information) integrity across noisy channels and less than reliable storage… …   Wikipedia

  • Error function — Plot of the error function In mathematics, the error function (also called the Gauss error function) is a special function (non elementary) of sigmoid shape which occurs in probability, statistics and partial differential equations. It is defined …   Wikipedia

  • Double Header — Batter, Catcher und Schiedsrichter Pitcher beim Wurf …   Deutsch Wikipedia

  • Substitution failure is not an error — (SFINAE) refers to a situation in C++ where an invalid substitution of template parameters is not in itself an error. The acronym SFINAE was first introduced by David Vandevoorde to describe related programming techniques. [cite book |… …   Wikipedia

  • HEC — Header Error Control Feld in einem ATM Header, entspricht einem CRC über den 5Byte Header …   Acronyms

  • HEC — Header Error Control Feld in einem ATM Header, entspricht einem CRC über den 5Byte Header …   Acronyms von A bis Z

  • CRC-based framing — The concept of CRC based framing was developed by StrataCom, Inc. in order to improve the efficiency of a pre standard Asynchronous Transfer Mode (ATM) link protocol. This technology was ultimately used in the principal link protocols of ATM… …   Wikipedia

  • ATM-Adresse — Asynchronous Transfer Mode (ATM) ist eine Technik der Datenübertragung, bei der der Datenverkehr in kleine Pakete – Zellen oder Slots genannt – mit fester Länge (53 Byte, davon 48 Byte Daten, 5 Byte Zellkopf) codiert und über asynchrones… …   Deutsch Wikipedia

Являетесь вы программистом или нет, вы видели его повсюду в Интернете. На данный момент в адресной строке браузера отображается нечто, что начинается с «https: //». Даже ваш первый скрипт Hello World отправил HTTP-header без вашего понимания. В этой статье мы собираемся узнать об основах HTTP-заголовков и о том, как их можно использовать в наших веб-приложениях.

Что такое HTTP Headers?

HTTP значит «Hypertext Transfer Protocol» (Протокол передачи гипертекста). Всемирная паутина использует этот протокол. Он был создан в начале 1990-х годов. Почти всё, что вы видите в вашем браузере, передаётся на ваш компьютер через HTTP. Например, когда вы открыли страницу этой статьи, ваш браузер отправил более 40 HTTP-запросов и получил HTTP-ответы для каждого из них.

Заголовки HTTP являются основной частью этих HTTP-запросов и ответов, и они несут информацию о браузере клиента, запрошенной странице, сервере и многом другом.

Пример

Когда вы вводите URL-адрес в адресной строке, ваш браузер отправляет HTTP-запрос, и он может выглядеть так:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

Первая строка — это «Request Line», которая содержит некоторую базовую информацию по запросу. Остальные — HTTP заголовки.

После этого запроса ваш браузер получает ответ HTTP, который может выглядеть так:

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: https://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Top 20+ MySQL Best Practices - Nettuts+</title>
<!-- ... rest of the html ... -->

Первая строка — это «Строка состояния», за которой следуют «HTTP-заголовки», до пустой строки. После этого начинается «содержимое» (в данном случае — HTML вывод).

Когда вы смотрите на исходный код веб-страницы в своём браузере, вы видите только часть HTML, а не заголовки HTTP, хотя они фактически были переданы вместе.

Эти HTTP-запросы также отправляются и принимаются для других вещей, таких как изображения, CSS-файлы, файлы JavaScript и т. д. Именно поэтому я сказал ранее, что ваш браузер отправил не менее 40 или более HTTP-запросов, поскольку вы загрузили только эту страницу статьи.

Теперь давайте рассмотрим структуру более подробно.

Как увидеть HTTP Headers

Для анализа HTTP-заголовков я использую следующие расширения Firefox:

  • Firebug

  • Live HTTP Headers

В PHP:

  • getallheaders() получает запросы headers. Вы можете использовать массив $_SERVER.
  • headers_list() получает отзывы headers.

Далее в этой статье мы увидим примеры кода в PHP.

Структура запроса HTTP

Первая строка HTTP-запроса называется линией запроса и состоит из трёх частей:

  • «method»  указывает, какой это запрос. Наиболее распространённые методы GET, POST и HEAD.
  • «path» , как правило, является частью URL-адреса, который идёт после host (домена). Например, если запрос «https://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/» , часть path будет «/tutorials/other/top-20-mysql-best-practices/».
  • Часть «protocol» содержит «HTTP» и версию, которая обычно 1.1 в современных браузерах.

Остальная часть запроса содержит HTTP headers как пары «Name: Value» в каждой строке. Они содержат различную информацию о HTTP-запросе и вашем браузере. Например, строка «User-Agent» предоставляет информацию о версии браузера и операционной системе, которую вы используете. «Accept-Encoding»  сообщает серверу, может ли ваш браузер принимать сжатый output, например gzip.

Возможно, вы заметили, что данные cookie также передаются внутри HTTP-заголовка. И если бы ссылочный url, это было бы в header тоже.

Большинство этих заголовков являются необязательными. Этот HTTP-запрос мог быть таким же маленьким:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com

И вы всё равно получите правильный ответ от веб-сервера.

Методы запроса

Три наиболее часто используемых метода запроса: GET, POST и HEAD. Вы, вероятно, уже знакомы с первыми двумя, начиная с написания html-форм.

GET: получение документа

Это основной метод, используемый для извлечения html, изображений, JavaScript, CSS и т. д. С использованием этого метода запрошено большинство данных, загружаемых в ваш браузер.

Например, при загрузке статьи Nettuts +, самая первая строка HTTP-запроса выглядит так:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
...

Как только html загрузится, браузер начнет отправлять GET-запрос изображений, который может выглядеть так:

GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1
...

Веб-формы можно настроить под метод GET. Вот пример.

<form method="GET" action="foo.php">

First Name: <input type="text" name="first_name" /> <br />
Last Name: <input type="text" name="last_name" /> <br />

<input type="submit" name="action" value="Submit" />

</form>

Когда эта форма отправлена, HTTP-запрос начинается так:

GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...

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

POST: отправка данных на сервер

Даже если вы можете отправлять данные на сервер с помощью GET и строки запроса, во многих случаях POST будет предпочтительнее. Отправка больших объёмов данных с помощью GET нецелесообразна и имеет ограничения.

Запросы POST чаще всего отправляются веб-формами. Давайте изменим предыдущий пример формы на метод POST.

<form method="POST" action="foo.php">

First Name: <input type="text" name="first_name" /> <br />
Last Name: <input type="text" name="last_name" /> <br />

<input type="submit" name="action" value="Submit" />

</form>

Отправка этой формы создает HTTP-запрос следующим образом:

POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43

first_name=John&last_name=Doe&action=Submit

Здесь нужно отметить три важных момента:

  • Путь в первой строке просто /foo.php, и больше нет строки запроса.
  • Добавлены заголовки Content-Type и Content-Length, которые предоставляют информацию об отправляемых данных.
  • Все данные теперь отправляются после заголовков, в том же формате, что и строка запроса.

Запросы POST метода также могут быть сделаны через AJAX, приложения, cURL и т. д. И все формы загрузки файлов необходимы для использования метода POST.

HEAD: получение информации заголовка

HEAD идентичен GET, за исключением того, что сервер не возвращает содержимое HTTP-ответа. Когда вы отправляете запрос HEAD, это означает, что вас интересуют только код ответа и HTTP headers, а не сам документ.

«Когда вы отправляете запрос HEAD, это означает, что вас интересуют только код ответа и HTTP headers,  а не сам документ».

С помощью этого метода браузер может проверить, был ли документ изменён для целей caching. Он также может проверить, существует ли документ вообще.

Например, если у вас много ссылок на веб-сайте, вы можете периодически отправлять HEAD-запросы каждой из них, чтобы проверить наличие неработающих ссылок. Это будет намного быстрее, чем при использовании GET.

Структура ответа HTTP

После того, как браузер отправляет HTTP-запрос, сервер отвечает HTTP-ответом. Исключая контент, он выглядит так:

Первой порцией данных является протокол. Обычно это снова HTTP/1.x или HTTP/1.1 на современных серверах.

Следующая часть — это код состояния, за которым следует короткое сообщение. Код 200 означает, что наш запрос GET был успешным и сервер вернёт содержимое запрошенного документа сразу после headers.

Мы все видели «404» pages. Это число фактически приходит из части кода состояния HTTP-ответа. Если запрос GET будет создан для path, который сервер не может найти, он ответил бы 404, а не 200.

Остальная часть ответа содержит headers так же, как HTTP-запрос. Эти значения могут содержать информацию о софте сервера при последнем изменении страницы/файла, типе mime и прочее…

Опять же, большинство этих headers на самом деле являются необязательными.

Коды статуса HTTP

  • 200 используются для успешных запросов.
  • 300 для перенаправления.
  • 400 используются, если возникла проблема с запросом.
  • 500 используются, если возникла проблема с сервером.

200 OK

Как упоминалось ранее, этот код состояния отправляется в ответ на успешный запрос.

206 Partial Content

Если приложение запрашивает только диапазон запрошенного файла, возвращается код 206.

Это часто используется с менеджерами закачек, которые могут остановить и возобновить загрузку или разделить загрузку на части.

404 Not Found

Когда запрашиваемая страница или файл не найдена, сервер отправляет код ответа 404.

401 Unauthorized

Защищённые паролем веб-страницы отправляют этот код. Если вы не ввели логин правильно, вы можете увидеть следующее в вашем браузере.

Обратите внимание, что это относится только к страницам, защищённым паролем HTTP, которые вызывают запросы для входа следующим образом:

403 Forbidden

Если вам не разрешен доступ к странице, этот код может быть отправлен в ваш браузер. Это часто происходит, когда вы пытаетесь открыть URL-адрес для папки, в которой нет индексной страницы. Если параметры сервера не позволяют отображать содержимое папки, вы получите ошибку 403.

Например, на моем локальном сервере я создал папку изображений. Внутри этой папки я помещаю файл .htaccess с этой строкой: «Options -Indexes». Теперь, когда я пытаюсь открыть http://localhost/images/ — я вижу это:

Существуют другие способы блокировки доступа и 403 могут быть отправлены. Например, вы можете блокировать по IP-адресу с помощью некоторых директив htaccess.

order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all

302 (or 307) Moved Temporarily & 301 Moved Permanently

Эти два кода используются для перенаправления браузера. Например, когда вы используете службу сокращения URL, такую как bit.ly, именно так они перенаправляют людей, которые идут по ссылке.

302 и 301 обрабатываются браузером очень похоже, но они могут иметь различные значения для spiders поисковых систем. Например, если ваш сайт не готов для обслуживания, вы можете перенаправить его в другое место с помощью 302. Поисковая система продолжит проверку вашей страницы в будущем. Но если вы перенаправите с использованием 301, это сообщит spider, что ваш сайт переехал в это место навсегда. За более точной информацией: http://www.nettuts.com перейдите на https://net.tutsplus.com/ используя 301 код вместо 302.

500 Internal Server Error

Этот код обычно отображается при сбое веб-скрипта. Большинство скриптов CGI не выводят ошибки непосредственно в браузер, в отличие от PHP. Если есть фатальные ошибки, они просто отправят код статуса 500. И тогда программист должен искать в журналах ошибок сервера, чтобы найти сообщения об ошибках.

Complete List

Вы можете найти полный список кодов состояния HTTP с их пояснениями here.

Заголовки HTTP в запросах HTTP

Теперь мы рассмотрим некоторые из наиболее распространенных HTTP headers , найденных в HTTP requests.

Почти все эти заголовки можно найти в массиве $ _SERVER в PHP. Вы также можете использовать функцию getallheaders() для извлечения всех заголовков одновременно.

Host

HTTP-запрос отправляется на определенные IP-адреса. Но так как большинство серверов способны размещать несколько сайтов под одним IP, они должны знать, какое доменное имя ищет браузер.

Host: net.tutsplus.com

Это в основном имя host, включая домен и поддомен.

В PHP его можно найти, как $_SERVER[‘HTTP_HOST’] или $_SERVER[‘SERVER_NAME’].

User-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

Этот заголовок может содержать несколько частей информации, таких как:

  • Имя и версия браузера.
  • Название и версия операционной системы.
  • Язык по умолчанию.

Именно так веб-сайты могут собирать определённую общую информацию о своих системах surfers. Например, они могут определить, использует ли surfer  мобильный браузер и перенаправляет их на мобильную версию своего веб-сайта, который лучше работает с низким разрешением.

В PHP может быть выражен так: $_SERVER[‘HTTP_USER_AGENT’].

if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
  echo "Please stop using IE6!";
}

Accept-Language

Accept-Language: en-us,en;q=0.5

Этот заголовок отображает настройки языка по умолчанию.   Если сайт имеет разные языковые версии, он может перенаправить нового surfer на основе этих данных.

Он может содержать несколько языков, разделённых запятыми. Первый — это предпочтительный язык, и каждый из перечисленных языков может иметь значение «q», которое представляет собой оценку предпочтения пользователя для языка (min. 0 max. 1).

В PHP его можно найти так: $ _SERVER [«HTTP_ACCEPT_LANGUAGE»].

if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
	header('Location: http://french.mydomain.com');
}

Accept-Encoding

Accept-Encoding: gzip,deflate

Большинство современных браузеров поддерживают gzip и отправляют это в header. Затем веб-сервер может отправить выходной HTML-код в сжатом формате. Это позволяет уменьшить размер до 80% для экономии пропускной способности и времени.

В PHP его можно найти так: $ _SERVER [«HTTP_ACCEPT_ENCODING»]. Однако, когда вы используете функцию обратного вызова ob_gzhandler(), она будет проверять значение автоматически, поэтому вам это не нужно.

// enables output buffering
// and all output is compressed if the browser supports it
ob_start('ob_gzhandler');

If-Modified-Since

Если веб-документ уже сохранен в кеше в браузере и вы посещаете его снова, ваш браузер может проверить, был ли документ обновлён, отправив следующее:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Если он не изменялся с этой даты, сервер отправляет код ответа «304 Not Modified», а содержимое — нет, и браузер загружает содержимое из cache.

В PHP его можно найти так: $ _SERVER [‘HTTP_IF_MODIFIED_SINCE’].

// assume $last_modify_time was the last the output was updated

// did the browser send If-Modified-Since header?
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

	// if the browser cache matches the modify time
	if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

		// send a 304 header, and no content
		header("HTTP/1.1 304 Not Modified");
		exit;
	}

}

Существует также HTTP-заголовок Etag, который можно использовать для проверки текущего кэша. Мы поговорим об этом в ближайшее время.

Cookie

Как следует из названия, это отправляет файлы cookie, хранящиеся в вашем браузере для этого домена.

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar

Это пары name=value, разделённые точками с запятой. Cookies могут также содержать id сеанса.

В PHP отдельные cookie-файлы могут быть доступны с помощью массива $ _COOKIE. Вы можете напрямую обращаться к переменным сеанса, используя массив $ _SESSION, и если вам нужен id сеанса, вы можете использовать функцию session_id () вместо cookie.

echo $_COOKIE['foo'];
// output: bar
echo $_COOKIE['PHPSESSID'];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120

Referer

Как следует из названия, этот HTTP header содержит ссылочный url.

Например, если я зашел на домашнюю страницу Nettuts + и нажал ссылку на статью, этот header будет отправлен в мой браузер:

Referer: https://net.tutsplus.com/

В PHP его можно найти как $ _SERVER [‘HTTP_REFERER’].

if (isset($_SERVER['HTTP_REFERER'])) {

	$url_info = parse_url($_SERVER['HTTP_REFERER']);

	// is the surfer coming from Google?
	if ($url_info['host'] == 'www.google.com') {

		parse_str($url_info['query'], $vars);

		echo "You searched on Google for this keyword: ". $vars['q'];

	}

}
// if the referring url was:
// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers

Возможно, вы заметили, что слово «referrer» написано с ошибкой, как «referer». К сожалению, он превратился в официальную спецификацию HTTP подобным образом и застрял.

Authorization

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

Authorization: Basic bXl1c2VyOm15cGFzcw==

Данные внутри header имеют кодировку base64. Например, base64_decode (‘bXl1c2VyOm15cGFzcw ==’) возвратит ‘myuser: mypass’

В PHP эти значения можно найти как $ _SERVER [‘PHP_AUTH_USER’] и $ _SERVER [‘PHP_AUTH_PW’].

Подробнее об этом будет, когда мы поговорим о заголовке WWW-Authenticate.

Заголовки HTTP в ответах HTTP

Теперь мы рассмотрим некоторые из наиболее распространенных HTTP headers, найденных в HTTP-ответах.

В PHP вы можете установить заголовки ответа, используя функцию header(). PHP уже отправляет определённые заголовки автоматически, для загрузки содержимого и настройки файлов cookie и прочее… Вы можете увидеть headers, которые отправляются или будут отправляться с помощью функции headers_list (). Вы можете проверить, были ли уже отправлены заголовки с помощью функции headers_sent().

Cache-Control

Определение из w3.org: «Поле заголовка Cache-Control используется для указания директив, которые ДОЛЖНЫ выполняться всеми механизмами кэширования по цепочке запросов/ответов». Эти «механизмы кэширования» включают шлюзы и прокси, которые может использовать ваш интернет-провайдер.

Пример:

Cache-Control: max-age=3600, public

«public» означает, что ответ может быть кэширован кем угодно. «max-age» указывает, сколько секунд действителен кеш. Разрешение кэширования вашего сайта может снизить нагрузку на сервер и пропускную способность, а также увеличить время загрузки в браузере.

Кэширование также может быть предотвращено с помощью директивы «no-cache».

Cache-Control: no-cache

Подробности смотрите в w3.org.

Content-Type

Этот header указывает «mime-type» документа. Затем браузер определяет, как интерпретировать содержимое на основании этого. Например, страница html (или PHP-скрипт с выходом html) может возвращать это:

Content-Type: text/html; charset=UTF-8

«text» — это тип, а «html» — подтип документа. Заголовок также может содержать больше информации, такой как charset.

Для gif-изображения это может быть отправлено.

Content-Type: image/gif

Браузер может использовать внешнее приложение или расширение браузера на основе mime-type. Например, это приведет к загрузке Adobe Reader:

Content-Type: application/pdf

При загрузке напрямую Apache обычно может обнаружить mime-тип документа и отправить соответствующий header. Кроме того, большинство браузеров имеют некоторую степень отказоустойчивости и автоопределение типов mime, если заголовки указаны неверно или отсутствуют.

Вы можете найти список общих типов mime here.

В PHP вы можете использовать функцию finfo_file() для определения mime-типа файла.

Content-Disposition

Этот header указывает браузеру открыть окно загрузки файла, вместо того, чтобы пытаться проанализировать содержимое. Пример:

Content-Disposition: attachment; filename="download.zip"

Это заставит браузер сделать это:

Обратите внимание, что соответствующий заголовок Content-Type также должен быть отправлен вместе с этим:

Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"

Content-Length

Когда контент будет передаваться браузеру, сервер может указать его размер (в байтах), используя этот header.

Content-Length: 89123

Это особенно полезно при загрузке файлов. Именно так браузер может определить ход загрузки.

Например, вот сценарий-макет, который я написал, имитирует медленную загрузку.

// it's a zip file
header('Content-Type: application/zip');
// 1 million bytes (about 1megabyte)
header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
	echo str_repeat(".",1000);

	// sleep to slow down the download
	usleep(50000);
}

Вот результат:

Теперь я собираюсь закомментировать заголовок Content-Length

// it's a zip file
header('Content-Type: application/zip');
// the browser won't know the size
// header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
	echo str_repeat(".",1000);

	// sleep to slow down the download
	usleep(50000);
}

Теперь результат такой:

Браузер может только сказать, сколько байтов было загружено, но он не знает общую сумму. И индикатор выполнения не показывает прогресс.

Etag

Это еще один header, который используется для кеширования. Это выглядит так:

Etag: "pub1259380237;gz"

Веб-сервер может отправлять этот header с каждым документом, который он обслуживает. Значение может быть основано на последней изменённой дате, размере файла или даже контрольной сумме файла. Браузер затем сохраняет это значение, так как он кэширует документ. В следующий раз, когда браузер запрашивает тот же файл, он отправляет это в HTTP-запросе:

If-None-Match: "pub1259380237;gz"

Если значение Etag документа совпадает с этим, сервер будет отправлять код 304 вместо 200, и никакого содержимого. Браузер будет загружать содержимое из своего кеша.

Last-Modified

Как следует из названия, этот header указывает дату последнего изменения документа в формате GMT:

Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
$modify_time = filemtime($file);

header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");

Это предлагает браузеру другой способ для cache документа. Браузер может отправить это в HTTP-запросе:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Мы уже говорили об этом ранее в разделе «If-Modified-Since».

Location

Этот заголовок используется для перенаправления. Если код ответа 301 или 302, сервер также должен отправить этот header. Например, когда вы перейдете на страницу http://www.nettuts.com, ваш браузер получит следующее:

HTTP/1.x 301 Moved Permanently
...
Location: https://net.tutsplus.com/
...

В PHP вы можете перенаправить surfer так:

header('Location: https://net.tutsplus.com/');

По умолчанию, это отправит 302 код ответа. Если вы хотите вместо 301 отправить:

header('Location: https://net.tutsplus.com/', true, 301);

Set-Cookie

Когда веб-сайт хочет установить или обновить файл cookie в вашем браузере, он будет использовать этот header.

Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT

Каждый файл cookie отправляется как отдельный header. Обратите внимание, что файлы cookie, установленные с помощью JavaScript, не проходят через HTTP headers.

В PHP вы можете установить cookie-файлы, используя функцию setcookie(), а PHP отправляет соответствующие HTTP headers.

setcookie("TestCookie", "foobar");

Что приводит к отправке этого заголовка:

Set-Cookie: TestCookie=foobar

Если дата истечения срока действия не указана, cookie удаляется, когда окно браузера закрыто.

WWW-Authenticate

Сайт может отправить этот header для аутентификации пользователя через HTTP. Когда браузер увидит этот header, он откроет диалоговое окно входа в систему.

WWW-Authenticate: Basic realm="Restricted Area"

Что будет выглядеть так:

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

if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

Content-Encoding

Этот header обычно устанавливается, когда возвращаемое содержимое сжимается.

Content-Encoding: gzip

В PHP, если вы используете функцию обратного вызова ob_gzhandler(), она будет автоматически установлена.

Заключение

Спасибо за прочтение. Надеюсь, эта статья послужит хорошей отправной точкой для изучения HTTP Headers. Пожалуйста, оставьте свои комментарии и вопросы ниже, и я постараюсь дать как можно больше ответов.

Содержание

  • Что такое код ответа HTTP
  • Как проверить код состояния страницы
  • В браузере
  • В Яндекс.Вебмастере
  • В Google Search Console
  • 1* класс кодов (информационные сообщения)
  • 100 Continue
  • 101 Switching Protocols
  • 102 Processing
  • 103 Checkpoint
  • 105 Name Not Resolved
  • 2* класс кодов (успешно обработанные запросы)
  • 200 ОК
  • 201 Created
  • 202 Accepted
  • 203 Non‑Authoritative Information
  • 204 No Content
  • 205 Reset Content
  • 206 Partial Content
  • 207 Multi‑Status
  • 226 IM Used
  • 3* класс кодов (перенаправление на другой адрес)
  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found/Moved 
  • 303 See Other
  • 304 Not Modified
  • 305 Use Proxy
  • 306 Unused
  • 307 Temporary Redirect
  • 308 Resume Incomplete
  • 4* класс кодов (ошибки на стороне клиента)
  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 408 Request Timeout
  • 409 Conflict
  • 410 Gone
  • 411 Length Required
  • 412 Precondition Failed
  • 413 Request Entity Too Large
  • 414 Request‑URI Too Long
  • 415 Unsupported Media Type
  • 416 Requested Range Not Satisfiable
  • 417 Expectation Failed
  • 418 I’m a teapot
  • 422 Unprocessable Entity
  • 423 Locked
  • 424 Failed Dependency
  • 425 Unordered Collection
  • 426 Upgrade Required
  • 428 Precondition Required
  • 429 Too Many Requests
  • 431 Request Header Fields Too Large
  • 434 Requested Host Unavailable
  • 444 No Response
  • 449 Retry With
  • 450 Blocked by Windows Parental Controls
  • 451 Unavailable For Legal Reasons
  • 456 Unrecoverable Error
  • 499 Client Closed Request
  • 5* класс кодов (ошибки на стороне сервера)
  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported
  • 506 Variant Also Negotiates
  • 507 Insufficient Storage
  • 508 Loop Detected
  • 509 Bandwidth Limit Exceeded
  • 510 Not Extended
  • 511 Network Authentication Required
  • Составили подробный классификатор кодов состояния HTTP. Добавляйте в закладки, чтобы был под рукой, когда понадобится.

    Что такое код ответа HTTP

    Когда посетитель переходит по ссылке на сайт или вбивает её в поисковую строку вручную, отправляется запрос на сервер. Сервер обрабатывает этот запрос и выдаёт ответ — трехзначный цифровой код HTTP от 100 до 510. По коду ответа можно понять реакцию сервера на запрос. 

    Первая цифра в ответе обозначает класс состояния, другие две — причину, по которой мог появиться такой ответ.

    Как проверить код состояния страницы

    Проверить коды ответа сервера можно вручную с помощью браузера и в панелях веб‑мастеров: Яндекс.Вебмастер и Google Search Console.

    В браузере

    Для примера возьмём Google Chrome.

    1. Откройте панель разработчика в браузере клавишей F12, комбинацией клавиш Ctrl + Shift + I или в меню браузера → «Дополнительные инструменты» → «Инструменты разработчика». Подробнее об этом рассказывали в статье «Как открыть исходный код страницы». 

    2. Переключитесь на вкладку «Сеть» в Инструментах разработчика и обновите страницу: 

    Как посмотреть код ответа сервера в инструментах разработчика в браузере

    Как посмотреть код ответа сервера в инструментах разработчика в браузере

    В Яндекс.Вебмастере

    Откройте инструмент «Проверка ответа сервера» в Вебмастере. Введите URL в специальное поле и нажмите кнопку «Проверить»:

    Как посмотреть код состояния в Вебмастере

    Как посмотреть код состояния в Вебмастере

    Как добавить сайт в Яндекс.Вебмастер и другие сервисы Яндекса

    В Google Search Console

    Чтобы посмотреть код ответа сервера в GSC, перейдите в инструмент проверки URL — он находится в самом верху панели:

    Проверка URL в инструменте GSC

    Проверка URL в инструменте GSC

    Введите ссылку на страницу, которую хотите проверить, и нажмите Enter. В результатах проверки нажмите на «Изучить просканированную страницу» в блоке «URL есть в индексе Google».

    Изучить просканированную страницу в GSC

    Изучить просканированную страницу в GSC

    А затем в открывшемся окне перейдите на вкладку «Подробнее»:

    HTTP код страницы в GSC

    HTTP код страницы в GSC

    Теперь расскажем подробнее про все классы кодов состояния HTTP.

    1* класс кодов (информационные сообщения)

    Это системный класс кодов, который только информирует о процессе передачи запроса. Такие ответы не являются ошибкой, хотя и могут отображаться в браузере как Error Code.

    100 Continue

    Этот ответ сообщает, что полученные сведения о запросе устраивают сервер и клиент может продолжать отправлять данные. Такой ответ может требоваться клиенту, если на сервер отправляется большой объём данных.

    101 Switching Protocols

    Сервер одобрил переключение типа протокола, которое запросил пользователь, и в настоящий момент выполняет действие.

    102 Processing

    Запрос принят — он находится в обработке, и на это понадобится чуть больше времени.

    103 Checkpoint

    Контрольная точка — используется в запросах для возобновления после прерывания запросов POST или PUT.

    POST отправляет данные на сервер, PUT создает новый ресурс или заменяет существующий данными, представленными в теле запроса. 

    Разница между ними в том, что PUT работает без изменений: повторное его применение даёт такой же результат, что и в первый раз, а вот повторный вызов одного и того же метода POST часто меняет данные. 

    Пример — оформленный несколько раз интернет‑заказ. Такое часто происходит как раз по причине неоднократного использования запроса PUT.

    105 Name Not Resolved

    Не удается преобразовать DNS‑адрес сервера — это  означает ошибку в службе DNS. Эта служба преобразует IP‑адреса в знакомые нам доменные имена.

    2* класс кодов (успешно обработанные запросы)

    Эти коды информируют об успешности принятия и обработки запроса. Также сервер может передать заголовки или тело сообщений. 

    200 ОК

    Все хорошо — HTTP‑запрос успешно обработан (не ошибка).

    201 Created

    Создано — транзакция успешна, сформирован новый ресурс или документ.

    202 Accepted

    Принято — запрос принят, но ещё не обработан.

    203 Non‑Authoritative Information

    Информация не авторитетна — запрос успешно обработан, но передаваемая информация была взята не из первичного источника (данные могут быть устаревшими).

    204 No Content

    Нет содержимого — запрос успешно обработан, однако в ответе только заголовки без контента сообщения. Не нужно обновлять содержимое документа, но можно применить к нему полученные метаданные.

    205 Reset Content

    Сбросить содержимое. Запрос успешно обработан — но нужно сбросить введенные данные. Страницу можно не обновлять.

    206 Partial Content

    Частичное содержимое. Сервер успешно обработал часть GET‑запроса, а другую часть вернул.

    GET — метод для чтения данных с сайта. Он говорит серверу, что клиент хочет прочитать какой‑то документ. 

    Представим интернет‑магазин и страницы каталога. Фильтры, которые выбирает пользователь, передаются благодаря методу GET. GET‑запрос работает с  получением данных, а POST‑запрос нужен для отправки данных.

    При работе с подобными ответами следует уделить внимание кэшированию.

    207 Multi‑Status

    Успешно выполнено несколько операций — сервер передал результаты выполнения нескольких независимых операций. Они появятся в виде XML‑документа с объектом multistatus. 

    226 IM Used

    Успешно обработан IM‑заголовок (специальный заголовок, который отправляется клиентом и используется для передачи состояния HTTP).

    3* класс кодов (перенаправление на другой адрес)

    Эти коды информируют, что для достижения успешной операции нужно будет сделать другой запрос, возможно, по другому URL.

    300 Multiple Choices

    Множественный выбор — сервер выдает список нескольких возможных вариантов перенаправления (максимум — 5). Можно выбрать один из них.

    301 Moved Permanently

    Окончательно перемещено — страница перемещена на другой URL, который указан в поле Location.

    302 Found/Moved 

    Временно перемещено — страница временно перенесена на другой URL,  который указан в поле Location.

    303 See Other

    Ищите другую страницу — страница не найдена по данному URL, поэтому смотрите страницу по другому URL, используя метод GET.

    304 Not Modified

    Модификаций не было — с момента последнего визита клиента изменений не было.

    305 Use Proxy

    Используйте прокси — запрос к нужному ресурсу можно сделать только через прокси‑сервер, URL которого указан в поле Location заголовка.

    306 Unused

    Зарезервировано. Код в настоящий момент не используется.

    307 Temporary Redirect

    Временное перенаправление — запрашиваемый ресурс временно доступен по другому URL.

    Этот код имеет ту же семантику, что код ответа 302 Found, за исключением того, что агент пользователя не должен изменять используемый метод HTTP: если в первом запросе использовался POST, то во втором запросе также должен использоваться POST.

    308 Resume Incomplete

    Перемещено полностью (навсегда) — запрашиваемая страница была перенесена на новый URL, указанный в поле Location заголовка. Метод запроса (GET/POST) менять не разрешается.

    4* класс кодов (ошибки на стороне клиента)

    Эти коды указывают на ошибки со стороны клиентов. 

    Скриншот страницы с ошибкой 404 с сайта modcloth.com

    Скриншот страницы с ошибкой 404 с сайта modcloth.com

    400 Bad Request

    Неверный запрос — запрос клиента не может быть обработан, так как есть синтаксическая ошибка (возможно, опечатка).

    401 Unauthorized

    Не пройдена авторизация — запрос ещё в обработке, но доступа нет, так как пользователь не авторизован.

    Для доступа к запрашиваемому ресурсу клиент должен представиться, послав запрос, включив при этом в заголовок сообщения поле Authorization.

    402 Payment Required

    Требуется оплата — зарезервировано для использования в будущем. Код предусмотрен для платных пользовательских сервисов, а не для хостинговых компаний.

    403 Forbidden

    Запрещено — запрос принят, но не будет обработан, так как у клиента недостаточно прав. Может возникнуть, когда пользователь хочет открыть системные файлы (robots, htaccess) или не прошёл авторизацию.

    404 Not Found

    Не найдено — запрашиваемая страница не обнаружена. Сервер принял запрос, но не нашёл ресурса по указанному URL (возможно, была ошибка в URL или страница была перемещена).

    405 Method Not Allowed

    Метод не разрешён — запрос был сделан методом, который не поддерживается данным ресурсом. Сервер должен предложить доступные методы решения в заголовке Allow.

    406 Not Acceptable

    Некорректный запрос — неподдерживаемый поисковиком формат запроса (поисковый робот не поддерживает кодировку или язык).

    407 Proxy Authentication Required

    Нужно пройти аутентификацию прокси — ответ аналогичен коду 401, только нужно аутентифицировать прокси‑сервер.

    408 Request Timeout

    Тайм‑аут запроса — запрос клиента занял слишком много времени. На каждом сайте существует свое время тайм‑аута — проверьте интернет‑соединение  и просто обновите страницу.

    409 Conflict

    Конфликт (что‑то пошло не так) — запрос не может быть выполнен из‑за конфликтного обращения к ресурсу (несовместимость двух запросов).

    410 Gone

    Недоступно — ресурс раньше был размещён по указанному URL, но сейчас удалён и  недоступен (серверу неизвестно месторасположение).

    411 Length Required

    Добавьте длины — сервер отклоняет отправляемый запрос, так как длина заголовка не определена, и он не находит значение Content‑Length. 

    Нужно исправить заголовки на сервере, и в следующий раз робот сможет проиндексировать страницу.

    412 Precondition Failed

    Предварительное условие не выполнено — стоит проверить правильность HTTP‑заголовков данного запроса.

    413 Request Entity Too Large

    Превышен размер запроса — перелимит максимального размера запроса, принимаемого сервером. Браузеры поддерживают запросы от 2 до 8 килобайт.

    414 Request‑URI Too Long

    Превышена длина запроса — сервер не может обработать запрос из‑за длинного URL. Такая ошибка может возникнуть, например, когда клиент пытается передать чересчур длинные параметры через метод GET, а не POST.

    415 Unsupported Media Type

    Формат не поддерживается —  сервер не может принять запрос, так как  данные подгружаются в некорректном формате, и сервер разрывает соединение.

    416 Requested Range Not Satisfiable

    Диапазон не поддерживается — ошибка возникает в случаях, когда в самом HTTP‑заголовке прописывается некорректный байтовый диапазон.

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

    417 Expectation Failed

    Ожидания не оправдались — прокси некорректно идентифицировал содержимое поля «Expect: 100‑Continue».

    418 I’m a teapot

    Первоапрельская шутка разработчиков в 1998 году. В расшифровке звучит как «я не приготовлю вам кофе, потому что я чайник». Не используется в работе.

    422 Unprocessable Entity

    Объект не обработан — сервер принял запрос, но в нём  есть логическая ошибка. Стоит посмотреть в сторону семантики сайта.

    423 Locked

    Закрыто — ресурс заблокирован для выбранного HTTP‑метода. Можно перезагрузить роутер и компьютер. А также использовать только статистический IP.

    424 Failed Dependency

    Неуспешная зависимость — сервер не может обработать запрос, так как  один из зависимых ресурсов заблокирован.

    Выполнение запроса напрямую зависит от успешности выполнения другой операции, и если она не будет успешно завершена, то вся обработка запроса будет прервана.

    425 Unordered Collection

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

    426 Upgrade Required

    Нужно обновление — в заголовке ответа нужно корректно сформировать поля Upgrade и Connection. 

    Этот ответ возникает, когда серверу требуется обновление до SSL‑протокола, но клиент не имеет его поддержки.

    428 Precondition Required

    Нужно предварительное условие — сервер просит внести в запрос информацию о предварительных условиях обработки данных, чтобы выдавать корректную информацию по итогу.

    429 Too Many Requests

    Слишком много запросов — отправлено слишком много запросов за короткое время. Это может указывать, например, на попытку DDoS‑атаки, для защиты от которой запросы блокируются.

    431 Request Header Fields Too Large

    Превышена длина заголовков — сервер может и не отвечать этим кодом, вместо этого он может просто сбросить соединение.

    Исправляется это с помощью сокращения заголовков и повторной отправки запроса.

    434 Requested Host Unavailable

    Адрес запрашиваемой страницы недоступен.

    444 No Response

    Нет ответа — код отображается в лог‑файлах, чтобы подтвердить, что сервер никак не отреагировал на запрос пользователя и прервал соединение. Возвращается только сервером nginx.

    Nginx — программное обеспечение с открытым исходным кодом. Его используют для создания веб‑серверов, а также  в качестве почтового или обратного прокси‑сервера. Nginx решает проблему падения производительности из‑за роста трафика. 

    449 Retry With

    Повторите попытку — ошибка говорит о необходимости скорректировать запрос и повторить его снова. Причиной становятся неверно указанные параметры (возможно, недостаточно данных).

    450 Blocked by Windows Parental Controls

    Заблокировано родительским контролем — говорит о том, что с компьютера попытались зайти на заблокированный ресурс. Избежать этой ошибки можно изменением параметров системы родительского контроля.

    451 Unavailable For Legal Reasons

    Недоступно по юридическим причинам — доступ к ресурсу закрыт, например, по требованию органов государственной власти или по требованию правообладателя в случае нарушения авторских прав. 

    456 Unrecoverable Error

    Неустранимая ошибка — при обработке запроса возникла ошибка, которая вызывает некорректируемые сбои в таблицах баз данных.

    499 Client Closed Request

    Запрос закрыт клиентом — нестандартный код, используемый nginx в ситуациях, когда клиент закрыл соединение, пока nginx обрабатывал запрос.

    5* класс кодов (ошибки на стороне сервера)

    Эти коды указывают на ошибки со стороны серверов. 

    При использовании всех методов, кроме HEAD, сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя. И его можно использовать в работе.

    Изображение страницы с ошибкой сайта REG.RU

    Изображение страницы с ошибкой сайта REG.RU

    500 Internal Server Error

    Внутренняя ошибка сервера — сервер столкнулся с неким условием, из‑за которого не может выполнить запрос. 

    Проверяйте, корректно ли указаны директивы в системных файлах (особенно htaccess) и нет ли ошибки прав доступа к файлам. Обратите внимание на ошибки внутри скриптов и их медленную работу.

    501 Not Implemented

    Не выполнено —  код отдается, когда сам сервер не может идентифицировать метод запроса. 

    Сами вы эту ошибку не исправите. Устранить её может только сервер.

    502 Bad Gateway

    Ошибка шлюза — появляется, когда сервер, выступая в роли шлюза или прокси‑сервера, получил ответное сообщение от вышестоящего сервера о несоответствии протоколов.

    Актуально исключительно для прокси и шлюзовых конфигураций.

    503 Service Unavailable

    Временно не доступен — сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее). 

    В поле Retry‑After заголовка сервер укажет время, через которое  можно повторить запрос.

    504 Gateway Timeout

    Тайм‑аут шлюза —  сервер, выступая в роли шлюза или прокси‑сервера, не получил ответа от вышестоящего сервера в нужное время.

    Исправить эту ошибку самостоятельно не получится. Здесь дело в прокси, часто — в веб‑сервере. 

    Первым делом просто обновите веб‑страницу. Если это не помогло, нужно почистить DNS‑кэш. Для этого  нажмите горячие клавиши Windows+R и введите команду cmd (Control+пробел). В открывшемся окне укажите команду ipconfig / flushdns и подтвердите её нажатием Enter.

    505 HTTP Version Not Supported

    Сервер не поддерживает версию протокола — отсутствует поддержка текущей версии HTTP‑протокола. Нужно обеспечить клиента и сервер одинаковой версией.

    506 Variant Also Negotiates

    Неуспешные переговоры — с такой ошибкой сталкиваются, если сервер изначально настроен неправильно. По причине ошибочной конфигурации выбранный вариант указывает сам на себя, из‑за чего процесс и прерывается.

    507 Insufficient Storage

    Не хватает места для хранения — серверу недостаточно места в хранилище. Нужно либо расчистить место, либо увеличить доступное пространство.

    508 Loop Detected

    Обнаружен цикл — ошибка означает провал запроса и выполняемой операции в целом.

    509 Bandwidth Limit Exceeded

    Превышена пропускная способность —  используется при чрезмерном потреблении трафика. Владельцу площадки следует обратиться к своему хостинг‑провайдеру. 

    510 Not Extended

    Не продлён — ошибка говорит, что на сервере отсутствует нужное для клиента расширение. Чтобы исправить проблему, надо убрать часть неподдерживаемого расширения из запроса или добавить поддержку на сервер.

    511 Network Authentication Required

    Требуется аутентификация — ошибка генерируется сервером‑посредником, к примеру, сервером интернет‑провайдера, если нужно ввести пароль для получения доступа к сети через платную точку доступа.

    Каждый раз, когда мы кликаем на какую-то ссылку или на наш сайт заходят поисковые роботы, происходит один из диалогов примерно такого содержания:

    — Привет, сервер! Я поисковый робот. Могу я просканировать эту страницу?

    — Привет! Конечно, заходи. 

    — А если вот эту страницу?

    — А вот здесь пока ведутся ремонтные работы, приходи позже. 

    Язык ответов HTTP понимают и браузеры, и поисковые роботы, и SEO-специалисты, которым он нужен при работе с сайтом.

    Если вы до сих пор путаете 301 с 302, и не знаете, зачем нужен 410 ответ — вам просто необходимо разобраться в кодах ответов HTTP, которые встречаются чаще всего. О них я и расскажу в этой статье. А еще мы узнаем, какую роль они отыграют в SEO и как не допустить ошибок в их использовании.

    Какие ответы серверов существуют?

    Начнем с того, что все коды ответов (состояния) серверов делятся на 5 классов, каждый из которых несет определенный смысл:

    • 1XX. Эти информационные коды говорят о том, что запрос был понят, принят сервером и уже обрабатывается. Такие временные ответы обычно не отображаются на экране пользователей, но служат внутренними кодами для браузеров.
    • 2XX. Обозначают успешную обработку полученного запроса. Они используются браузерами для подтверждения того, что запрос был принят, обработан и отражают его текущий статус.
    • 3XX. Это коды перенаправления. Говорят о том, что серверу нужно выполнить дополнительные действия — например, перейти по редиректу на новый адрес.
    • 4XX. Говорят об ошибке на стороне пользователя. Чаще всего появляются, если время ожидания браузера истекло или запрос был введен неправильно.
    • 5XX. Говорят об ошибке сервера. Это значит, что вы запрашиваете специфический ресурс и он найден, но сервер не может дать вам к нему доступ. В конечном счете, запрос не может быть обработан.

    Не все ответы сервера можно увидеть прямо на экране, большинство так и остаются внутренними кодами для браузеров и поисковых роботов. Чтобы быстро узнать статус любой страницы, откройте инструменты разработчика в браузере Chrome (нажмите F12). Перейдите на вкладку Network, обновите страницу и получите список статусов каждого элемента, включая саму страницу:

    панель веб-мастеров

    Именно в этих трех цифрах в колонке Status зашифрованы данные о состоянии страницы: можно ли ее сканировать, находится ли она по этому адресу, загружается ли все ее содержимое и т. д. 

    Какие же коды ответов сервера встречаются чаще всего? И что они значат для оптимизации сайта? Давайте внимательно рассмотрим самые полезные для SEO ответы и способы их обработки.

    Ответы серверов, которые встречаются чаще всего 

    На самом деле существует более 70 различных кодов состояния сервера, но, скорее всего, вы никогда не столкнетесь с большей половиной из них. Однако знать самые распространенные коды состояния HTTP очень важно, потому что ответы сервера напрямую влияют на индексацию вашего сайта, краулинговый бюджет и продвижение ресурса в поисковых системах. 

    301 Moved Permanently 

    Говорит о том, что URL был навсегда перенесен на новое место. Браузеры самостоятельно переходят по 301 переадресации — никакого действия от пользователя не требуется. 

    301 moved permamently
    «Перемещено навсегда»

    301 код ответа обычно используют при переводе сайта с HTTP на HTTPS, склейке зеркал (страниц с www и без www), настройке слеша в конце URL, а также при переносе части сайта или всех страниц на новый домен. Этот редирект идеально подходит, если вы хотите передать ссылочный вес старой страницы на новую и сохранить результаты SEO-продвижения. 

    Совет: Старайтесь не перенаправлять пользователей с удаленного URL на главную страницу сайта. Например, в вашем интернет-магазине есть карточка с неактуальным товаром, но с неплохой ссылочной массой. Вы хотите сохранить этот вес и ставите 301 редирект на главную. Здесь и кроется ошибка! Такой редирект воспринимается Google как 404 Soft, а это означает, что поисковик не будет передавать сигналы со старого URL на новый. В такой ситуации всегда перенаправляйте страницу на максимально похожую (или 404, если аналогичная страница отсутствует). 

    Кроме того, избегайте цепочек редиректов с двумя и больше переадресациями, так как они создают дополнительную нагрузку на сервер и даже могут помешать пользователям перейти на ваш сайт как небезопасный. Google не индексирует дальше 4-го редиректа, и после каждого теряется вес, поэтому лучше ставьте прямые редиректы (вместо 1 -> 2 -> 3, сразу 1 -> 3). 

    пример цепочки редиректов

    Через несколько лет можете смело удалять 301, чтобы уменьшить нагрузку на сервер. 

    302 Found / Moved Temporarily

    В отличие от постоянного 301 редиректа, этот — временный. Он говорит о том, что страница найдена, но пока размещена по другому адресу.

    Обычно его путали с 301, а после того, как Google объявил, что все 3хx редиректы передают ссылочный вес, — ситуация усугубилась. По факту, его нужно ставить, если вы точно уверены, что будете использовать старый URL снова. Как раз об этом вы и сообщаете поисковику с помощью 302 сигнала, а он в ответ оставляет весь ссылочный вес за старой страницей.

    302 found
    «Найдено»

    Если вы будете использовать 302 редирект на постоянной основе, Google в конечном итоге воспримет его как 301 со всеми вытекающими последствиями. Также проверьте, нет ли на вашем сайте 302 редиректов, которые на самом деле должны быть 301 — такая ошибка встречается очень часто.

    304 Not Modified

    Сервер отдает 304 Not Modified ответ, когда страница остается неизменной со времени последнего посещения.

    Все браузеры хранят в своем кэше данные заголовка Last-Modified. В свою очередь, это позволяет им точно знать, когда страница была в последний раз изменена. И когда поисковые роботы заходят на страницу и видят, что значение заголовка совпадает с уже сохраненным в кэше, сервер возвращает 304 ответ.

    304 not modified
    «Не изменялось»

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

    Лучший ответ сервера для оптимизатора ― 200 ОК. Он означает, что запрос успешно обработан. Но 304 несет ту же нагрузку. Как правило, на новые страницы и первое посещение должен выдаваться ответ 200, на все последующие, если не произошло изменений — 304.

    403 Forbidden

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

    403 forbidden
    «Запрещено»

    403 ошибка может появиться, если пользователь вошел на сайт, но у него нет разрешения для доступа к закрытой внутренней сети. Например, если я попытаюсь зайти в кабинет админа SE Ranking по прямому URL, используя пароль и логин личного аккаунта, на экране будет 403 ошибка «Нет доступа». Также 403 ошибка возникает, если индексный файл для главной указан неправильно. Он обязательно должен иметь название index и расширение: *.shtml, *.html, *.htm, *.phtml или *.php.

    Кроме того, когда вы переносите сайт на HTTPS, то 403 ответ появится, когда DNS-кэш ещё не успел обновиться, а вы уже что-то от него хотите. Лучше подождите, или, если это вопрос жизни и смерти, обновите кэш принудительно.

    Совет: страницы с 403 кодом ответа в конечном итоге будут удалены из индекса, поэтому Google рекомендует использовать 404 ответ вместо 403.

    404 Not Found

    Самая «любимая» ошибка в SEO. Говорит о том, что сервер ничего не нашел по указанному адресу, хотя соединение между сервером и клиентом прошло успешно.

    404 not found
    «Не найдено»

    Не стоит переживать, если вы увидите много 404 страниц в своей Google Search Console. Поисковик просто сообщает вам, какие страницы удалены, а вам уже решать, нужно ли их проверять. Но что стоит точно сделать — убрать все ссылки на удаленные страницы, чтобы не путать посетителей при навигации по вашему сайту.

    Обычно мы видим этот код ошибки, когда вводим неправильный URL в браузер и, как следствие, пытаемся получить доступ к несуществующей странице. Или, например, владелец сайта удалил страницу без редиректа URL по новому адресу. Как результат — 404 ошибка. Чтобы решить проблему, посетителю нужно перепроверить написание URL или попробовать найти информацию на сайте самостоятельно через поиск, а владельцу ресурса ― исправить «битые» ссылки на рабочие. 

    404 страница не индексируется и не передает вес. Поэтому некоторые оптимизаторы грешат «мягкой 404», выдавая стандартную страницу с ответом 200 вместо 404. Но это считается плохой практикой, потому что 200 код говорит Google, что по этому URL есть реальная страница. В конечном счете, страница оказывается в индексе, и поисковик продолжает свои попытки сканировать несуществующие URL-адреса вместо сканирования ваших реальных страниц.

    Как настроить 404 страницу для своего сайта

    Если раньше после перехода на несуществующую страницу пользователь видел перед собой только цифру 404, то сейчас — просто море креатива. Но не стоит забывать, что он  пришел с конкретным запросом и ваша задача — дать решение, а не развлечь его. Поэтому не забудьте оптимизировать 404 страницу — добавьте навигацию своего сайта или контактную форму, особенно если на 404 страницы идет трафик.

    пример 404

    Если ваша CMS (система управления контентом) не создала 404 страницу, вы можете создать ее самостоятельно. 

    С помощью htaccess

    Самый простой способ настроить страницу с 404 ошибкой — добавить сообщение об ошибке, например ErrorDocument 404 “<H1> Not Found </ H1>” в сам файл .htaccess. 

    В результате у вас должно получиться что-то вроде этого:

    пример 404 без дизайна

    Через PHP

    Вы можете использовать функцию заголовка и менять контент 404 страницы в зависимости от разных сценариев (например, юзер сделал ошибку в URL самостоятельно или уже перешел по «битой» ссылке с какого-то ресурса). 

    Детальнее — в этой инструкции. 

    Через WordPress

    У вас есть несколько вариантов:

    • Отредактируйте существующую страницу 404, которая уже есть в вашей теме.
    • Добавьте свою 404 страницу, если ваша тема ее не предлагает по умолчанию.
    • Используйте плагин для 404 страницы.

    Подробности можно узнать здесь.

    410 Gone

    Этот ответ говорит о том, что страница или документ не доступны по указанному адресу и новый адрес неизвестен. 

    Более того, инструмент проверки URL в Google Search Console обозначает 410 ответы как 404, что приводит к еще большему количеству 404 ошибок, обнаруженных в консоли.

    410 gone

    «Удалено»

    410 ответ чаще всего встречается на страницах с низким трастом, без ссылок или тех, что удалены безвозвратно. Например, с товаром, которого больше не будет в продаже.

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

    410 ответ сервера

    Совет: подумайте дважды, прежде чем удалять страницу навсегда. Если вы сомневаетесь, лучше поставить редирект на похожую страницу и получить хотя бы часть текущего трафика. Если же удаления страницы не избежать, обязательно проверьте ссылки, которые на нее ведут — как только страница будет удалена, магия ссылок закончится тоже.

    503 Service Unavailable

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

    503 service unavailable

    «Сервис недоступен»

    В большинстве случаев 503 появляется, если сервер перегружен, например, превышено ограничение на число входящих запросов или сервер проходит техническое обслуживание.

    Могут быть ещё такие причины:

    • DDOS-атака на сайт.
    • Использование большого количества скриптов и других элементов с внешних ресурсов: виджеты, картинки.
    • Запросы к базе данных и извлечение оттуда информации занимают слишком много времени.
    • Чрезмерное количество обращений к сайту от поисковиков, пользователей или сервисов по парсингу сайта.

    Совет: в идеале в сообщении с 503 ошибкой обязательно нужно указать, что пользователю нужно вернуться на сайт через Х времени. К сожалению, так очень редко делают — обычно просят попытать удачу позже.

    И последнее, но не менее важное: код состояния 503 не позволяет поисковым системам индексировать сайт. Кроме того, он сообщает, что сайт плохо обслуживается, потому что пользователи не могут попасть, куда хотели. Поэтому важно, чтобы неполадки были устранены как можно быстрее — иначе это скажется на позициях сайта.

    Как настроить 503 страницу для своего сайта через PHP

    Вот как выглядит код состояния 503 в PHP:

    <?php
    header("HTTP/1.1 503 Service Temporarily Unavailable");
    header("Status: 503 Service Temporarily Unavailable");
    header("Retry-After: 3600");
    ?>

    Больше подробностей можно почитать в этой инструкции.

    Как проверить коды состояния всех страниц на сайте

    Чтобы быть в курсе всего, что происходит на вашем сайте, нужно мониторить коды состояния всех ваших страниц. Конечно, для этого можно использовать расширение Live HTTP Headers для Chrome или отчет «Покрытие» в Google Search Console, но лучше, если вы проанализируете ответы до того, как до них доберутся поисковые роботы.

    Если вы хотите быстро проверить коды состояния всех страниц вашего сайта одним кликом, обязательно попробуйте наш инструмент «Аудит сайта». 

    Инструмент не просто проверит все страницы на вашем сайте и проанализирует ключевые параметры оптимизации, но и выполнит SEO-аудит всего ресурса по важным техническим параметрам, найдет ошибки и даже подскажет методы их решения. 

    анализ оветов сервера

    Все статусы страниц вы увидите в основном отчете, в котором проанализированы технические параметры, страницы, мета-теги, ссылки и контент. 

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

    Если же вас интересуют только коды состояния всех страниц, просто перейдите на вкладку «Сканированные страницы». Все данные можно экспортировать в формате XLS для подробного изучения:

    ответы сервера всех страниц

    Безусловно, найти ошибки в кодах ответов это только полдела. Решать проблемы, связанные с ошибками сервера, вам все равно придется самостоятельно, но сам поиск ошибок у вас теперь будет занимать считанные минуты. Оптимизировав коды состояния своих страниц, не забудьте отправить их на повторную индексацию. 

    Чтобы сдать этот экзамен на отлично, мы подготовили для вас шпаргалку по правилам HTTP-знаков с лучшими SEO-советами. Теперь какой бы знак не встретился у вас на пути, вы будете знать, что делать. 

    инфографика с ответами сервера

    Юлия — контент-маркетолог c 10-летним опытом работы в журналистике, копирайтинге, рекламе и PR.

    Своим опытом и знаниями она делится, создавая полезные статьи про SEO и диджитал-маркетинг для блога SE Ranking и популярных медиа.

    Когда Юлия не пишет статьи, она осваивает новые асаны, путешествует и помогает волонтерской организации YWCA.

    You cannot use any header as you want, that’s forbidden.

    As stated in Documentation,

    exception email.errors.HeaderParseError

    … when an attempt is made to create a header that appears to contain an embedded header (that is, there is what is supposed to be a continuation line that has no leading whitespace and looks like a header).


    Why it is dangerous and should be handled well?

    First, you may read this, it provide a simple example how a SMTP header injection attack can be done.

    You may ask how can it be done? I mean you are not letting anyone to edit your backend right?

    Let’s imagine, for you app there may be some field entered by user, for example 'message',

    msg['message'] = 'abc' #Entered by user
    

    That’s ok, but what if

    msg['message'] = 'abcrnreplyTo:attacker@hello.com'
    #or
    msg['message'] = 'abcrnTo:attacker@hello.com'
    

    Attacker can easily override your email for like sending spam email. That’s why it do the check for you.


    You may even check if the header safe by

    email.header.Header('string')
    

    Let’s take a look how python email library do the checking.

    Searching in the source code, Lib/email/header.py

    In ln50-52:

    # Find a header embedded in a putative header value.  Used to check for
    # header injection attack.
    _embedded_header = re.compile(r'n[^ t]+:')
    

    You may try it, all example you provided can pass it except the one you stated.

    As email header structure is always n(key_without_space):, so nhello : passed but not nhello:.

    You cannot use any header as you want, that’s forbidden.

    As stated in Documentation,

    exception email.errors.HeaderParseError

    … when an attempt is made to create a header that appears to contain an embedded header (that is, there is what is supposed to be a continuation line that has no leading whitespace and looks like a header).


    Why it is dangerous and should be handled well?

    First, you may read this, it provide a simple example how a SMTP header injection attack can be done.

    You may ask how can it be done? I mean you are not letting anyone to edit your backend right?

    Let’s imagine, for you app there may be some field entered by user, for example 'message',

    msg['message'] = 'abc' #Entered by user
    

    That’s ok, but what if

    msg['message'] = 'abcrnreplyTo:attacker@hello.com'
    #or
    msg['message'] = 'abcrnTo:attacker@hello.com'
    

    Attacker can easily override your email for like sending spam email. That’s why it do the check for you.


    You may even check if the header safe by

    email.header.Header('string')
    

    Let’s take a look how python email library do the checking.

    Searching in the source code, Lib/email/header.py

    In ln50-52:

    # Find a header embedded in a putative header value.  Used to check for
    # header injection attack.
    _embedded_header = re.compile(r'n[^ t]+:')
    

    You may try it, all example you provided can pass it except the one you stated.

    As email header structure is always n(key_without_space):, so nhello : passed but not nhello:.

    Понравилась статья? Поделить с друзьями:
  • Error hdlcompiler 806
  • Error has occurred in builder routine
  • Error has occurred honkai impact
  • Error has been observed at the following site
  • Error has been encountered while trying to load the file zbrush