Отправляет ли IE10 незаконные запросы POST?

У меня есть захват Wireshark запроса POST, отправленного IE10. Запрос POST выдается в соответствии с RFC 1867 и включает boundary:

Content-Type: multipart/form-data; boundary=945637143527273; charset=UTF-8

Что мне кажется довольно странным, так это

charset=UTF-8

часть после токена

boundary=945637143527273;

Когда я смотрю на раздел Examples в RFC, заголовок Content-Type всегда завершается границей, а завершающие данные, такие как charset, отсутствуют.

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


Изменить: дальнейшее изучение этой темы привело меня к следующему вопросу:

Какие правила применяются к границе MIME?

Принятый ответ относится к RFC 2046, где граница указывается следующим образом. :

boundary := 0*69<bchars> bcharsnospace

bchars := bcharsnospace / " "

bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
                  "+" / "_" / "," / "-" / "." /
                  "/" / ":" / "=" / "?"

Итак, поскольку bcharsnospace не содержит ;, часть charset=UTF-8 явно не принадлежит границе. Должен ли я игнорировать его в этом случае или это недопустимое значение для заголовка Content-Type?


person eckes    schedule 04.11.2013    source источник
comment
Порядок подзначений (параметров) не имеет значения. Вы разбиваете на ; и делите на =, чтобы получить подзначения заголовков. Затем вы просто ссылаетесь на значения 'boundary' и 'charset'... независимо от их порядка.   -  person CodeAngry    schedule 14.03.2015


Ответы (2)


Вам нужно проанализировать все поле заголовка в соответствии с грамматикой для типов мультимедиа; «charset» — это такой же параметр, как и «граница».

person Julian Reschke    schedule 04.11.2013

Я не могу комментировать ваш вопрос конкретно о поведении IE10, но я прокомментирую ваш вопрос о том, что вы должны с этим делать:

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

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

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

В такие моменты стоит учитывать закон Постеля: Будьте консервативны в том, что отправляете, будьте либеральны в том, что вы принимаете.

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

person Spudley    schedule 04.11.2013
comment
:-) Я точно не хочу блокировать всех пользователей IE10. Суть вопроса в том, нормально ли поведение IE (я молча приму запрос) или нет (я буду много разглагольствовать против IE). - person eckes; 04.11.2013