Как декодировать заголовок HTTP-запроса chrome? - PullRequest
0 голосов
/ 16 октября 2019

Я использую Python и сокеты, чтобы сделать простой сервер. Когда я получаю заголовок, используя request.recv(1024), я не могу декодировать закодированные данные. Это отлично работает с Firefox. Я использовал utf-8 в качестве кодека для декодирования.

Использует ли Chrome другую кодировку или как? Ошибка:

Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> head.decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 8: invalid

1 Ответ

0 голосов
/ 16 октября 2019

Я понятия не имею, что именно вы делаете (код не показан), но в первую очередь HTTP-сообщение - это не UTF-8. Цитировать из стандартного :

Получатель ДОЛЖЕН проанализировать HTTP-сообщение как последовательность октетов в кодировке, которая является надмножеством US-ASCII [USASCII]. Анализ HTTP-сообщения как потока символов Unicode без учета конкретной кодировки создает уязвимости безопасности из-за различных способов обработки библиотеками обработки строк недопустимых многобайтовых последовательностей символов, которые содержат октет LF (% x0A).

И позже он говорит относительно значения полей в заголовке HTTP:

Исторически, HTTP разрешал содержимое полей с текстом в ISO-8859-1 кодировка [ISO-8859-1], поддержка других кодировок только с использованием кодировки [RFC2047]. На практике большинство значений полей заголовка HTTP используют только подмножество кодировки US-ASCII [USASCII]. Вновь определенные поля заголовка ДОЛЖНЫ ограничивать свои значения полей октетами US-ASCII. Получатель ДОЛЖЕН обрабатывать другие октеты в содержимом поля (obs-text) как непрозрачные данные .

Таким образом, не используйте UTF-8 для декодирования HTTP-сообщения в первомместо, поскольку оно не предназначено для такой интерпретации.

UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0xfc в позиции 8: неверно

\0xfc равно ü при интерпретации как ISO-8859-1, что, вероятно, является интерпретацией, предназначенной отправителем. Это недопустимый UTF-8, но, как я уже сказал, сообщение HTTP не должно рассматриваться как UTF-8.

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