Что такое HTTP-заголовок? Что такое кодировка?

#xhtml #character-encoding #http-headers

#xhtml #кодировка символов #http-заголовки

Вопрос:

Я новичок в мире кодирования, а также PHP и XHTML. Я просто просматривал детали мета-тегов и не понимаю ни свойства http-equiv, ни для чего используется кодировка, а также к чему относится значение UTF-8, например <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> .

Ответ №1:

Есть действительно хорошая статья Джоэла Спольски, в которой обсуждаются кодировки. Взгляните:

Абсолютный минимум, который абсолютно точно должен знать каждый разработчик программного обеспечения о Unicode и наборах символов (без оправданий!)

Что касается HTTP-заголовков, быстрый поиск в Google по запросу «понимание HTTP-заголовков» выявил довольно много хороших статей, которые их описывают. Вот один из них: HTTP-заголовки для чайников.

Короче говоря, HTTP-заголовки — это в основном небольшие сообщения, которые отправляются в веб-браузер пользователя, которые сообщают браузеру о выходных данных, которые он собирается получить (т. Е. Является ли это веб-страница, файл, изображение; должно ли оно быть кэшировано; и т.д.), Или для таких вещей, как cookies, Которые должны быть сохранены браузером клиента.

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

В вашем случае вы, вероятно, говорите о конкретном HTTP-заголовке, который определяет набор символов для страницы. <meta http-equiv=""> Теги используются для имитации HTTP-заголовков.

Например, если у вас была статическая HTML-страница и вы хотели воспользоваться определенным HTTP-заголовком, но не смогли настроить его на веб-сервере, вы могли бы использовать <meta http-equiv=""> тег для достижения того же результата.

Комментарии:

1. @Ryan — Спасибо, Райан. Бегло просмотрел статью, и, похоже, мне потребуется некоторое время, чтобы разобраться в концепциях. Я надеялся, что кто-нибудь сможет объяснить мне это на простейших примерах, чтобы, если я смогу понять это, я мог понять более сложные концепции.

2. Понял. Я добавил больше к своему ответу, чтобы объяснить часть вашего вопроса, посвященную HTTP-заголовкам, но я думаю, вам действительно интересно узнать о кодировках. Статья может показаться сложной, но я думаю, что ее довольно легко понять (просто она длинная).

3. @Ryan — Спасибо, Райан. Это было полезно. Поправьте меня, если я ошибаюсь. HTTP-заголовки могут быть отправлены с веб-сервера в клиентский браузер только при выполнении запроса клиентом. Это правильно? Когда вы говорите имитировать HTTP-заголовки , что это значит? Что такое набор символов и как это используется? Причина, по которой я спрашиваю, в том, что я видел ссылку на него и в PHP.

4. @PeanutsMonkey — Да, поскольку протокол HTTP не имеет состояния (то есть соединение между клиентом и сервером закрывается после того, как клиент получает свой ответ), HTTP-заголовки могут быть отправлены с сервера клиенту (и наоборот) только тогда, когда клиент делает запрос. Имитация HTTP-заголовков означает, что вместо использования реального HTTP-заголовка вы помещаете на страницу тег <meta>, который приведет к точно такому же результату в браузере.

5. @PeanutsMonkey — Что касается вопроса о наборах символов, вам действительно стоит прочитать статью, которую я опубликовал. Это дает очень простой, прямолинейный и обстоятельный ответ на этот вопрос. При этом, если вы не планируете работать с китайскими иероглифами (или любыми другими неанглоязычными символами), просто поместите <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> тег на свою страницу, и вам действительно не нужно будет беспокоиться об этом. Однако, если вы собираетесь создавать международное приложение, вам, вероятно, придется ознакомиться с ними, и эта статья — отличное место для начала.

Ответ №2:

@Ryan: Отличная ссылка. Жаль, что я не прочитал статью 12 лет назад, прежде чем приступил к крупному международному внедрению CMS.

Проще говоря, когда браузер получает поток HTTP-ответов (веб-страницу, которая была запрошена), все, что он видит, — это последовательность байтов. Поскольку байты могут означать разные символы, в зависимости от кодировки, которая использовалась сервером, очень важно, чтобы браузер использовал кодировку, указанную в мета-теге, при интерпретации потока байтов. Если сервер использовал кодировку, отличную от той, что он поместил в мета-тег, вы увидите тарабарщину.

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