Что вы знаете о http Content-Type?

HTTP

предисловие

В качестве фронтенд-разработки, и в конечном итоге работать над запросом интерфейса. Для общего типа контента, также сказал, что несколько, я чувствую себя довольно понимающим. До одного дня, я хочу найти Content-Type при просмотре пакетных интерфейсов google merge: multipart/mixed, и Content-Type: application/ when http, немного неожиданно. Быстро под Content-Type-глубокое изучение соответствующего контента, чтобы компенсировать их недостатки, с точки зрения внешнего интерфейса, чтобы посмотреть Content-Type.

Content-Type

Тип содержимого: Тип MIME Указывает, что руководитель объекта для ресурсов. Если ContentType не указан, по умолчанию используется текст / HTML Есть два сценария: В просьбе (например, Post или put) клиент сообщает тип сервера данных фактически переданными.

В ответе заголовок Content-Type сообщает клиенту тип содержимого того, что было фактически возвращено. В некоторых случаях браузеры выполняют поиск MIME и не обязательно учитывают значение этого заголовка; чтобы предотвратить такое поведение, заголовок X-Content-Type-Options может быть установлен на nosniff.

Короче говоря, он идентифицирует ресурс или тип MIME требуемого ресурса.

Синтаксис следующий:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

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

media-type

Больше отображается как тип MIME (многоцелевые расширения почты Интернета), а именно многоцелевые расширения почты Интернета.
Его целью является стандартизированное определение характера и формата документов.
Браузеры обычно используют типы MIME (а не расширения файлов), чтобы определить, как обрабатывать документы;
Поэтому очень важно, чтобы сервер был правильно настроен для добавления правильного типа MIME к заголовку объекта ответа.

структура

Структура MIME выглядит следующим образом: Он состоит из двух строк типа и подтипа, разделенных символом «/». Пробелы не допускаются. Не чувствителен к регистру, но традиционно все в нижнем регистре. Допускаются следующие дополнительные параметры:

type/subtype;parameter=value

в:

  • тип соответствует общим категориям, таким как текст/видео и т. д.
  • Подтип соответствует точному подклассу, например, текст подразделяется на обычные (обычный текст), html (исходный код html), файлы календаря (.ics) и т. д.
  • Параметр может быть Charset или Bundaary.

Types

Категория включает два типа: независимый тип и составной тип.

независимый тип

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

  • текст Текстовые данные включают некоторое удобочитаемое содержимое или исходный код. Например: текст/обычный, текст/csv, текст/html.
  • заявление Данные представляют собой двоичный тип, такой как application/octet-stream, application/pdf, application/pkcs8, application/zip.
  • аудио Аудио или музыкальные данные, например, audio/mpeg, audio/vorbis
  • видео Данные или видеофайлы, такие как видео / mp4
  • изображение Изображение или графические данные, включая растровые и векторные неподвижные изображения и анимированные версии в формате неподвижного изображения. Например, изображение/gif, изображение/png, изображение/jpeg, изображение/bmp, изображение/webp, изображение/x-icon

Составной тип

Тип Multipart указывает категорию документа, который разделен на части, часто с разными типами MIME. Его также можно использовать для представления нескольких независимых файлов, принадлежащих одному и тому же объекту, составляющих сложный документ. Распространено в сценариях электронной почты.
Существует два типа Multipart: сообщение и multipart.

  • сообщение Сообщение, которое включает в себя другую информацию, часто используемую в следующих сценариях, например, указание на то, что электронное письмо содержит информацию о пересылке, или, в случае нескольких сообщений, позволяет отправлять большие объемы данных в виде фрагментов. Включая message/rfc822 и message/partial
  • multipart
    Данные, состоящие из нескольких компонентов разных типов MIME, таких как multipart/form-data (данные, сгенерированные с помощью FormData API).

Прочитав основное определение, давайте взглянем на распространенные типы и сценарии использования.

Распространенные типы и сценарии использования

Статические ресурсы, изображения, медиа

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

класс приложения

  • application/json

    С ростом популярности json, облегченного формата взаимодействия с данными, особенно удобства взаимодействия со скриптами, все больше и больше формат json используется во фронтальных и тыловых интерфейсах. Для протокола http конечной передачей являются символы. Дальнейшее описание здесь не приводится.

  • application/x-www-form-urlencodedКак тип по умолчанию для отправки форм, он указывает, что данные закодированы как пары ключ-значение в стандартном формате кодирования. Данные кодируются парами "ключ-значение", разделенными символом "&", а ключ и значение разделяются символом "=". вместо данных).
    Взяв Sina в качестве примера, мы можем увидеть его сообщение запроса (выберите formdata, источник просмотра хорошо виден):

  • multipart/form-dataДля сравнения, он также помещен здесь.
    Обычно используется для отправки форм с использованием файлов, для почтовых запросов формат выглядит следующим образом:

    Content-Type: multipart/form-data; boundary=aBoundaryString
    

    Граница указывает разделитель каждой части в теле запроса (для составной категории это поле существует, чтобы различать разделение данных в теле запроса), а тело запроса содержит содержимое каждой части соответствующей формы. Каждая часть будет иметь собственное тело запроса и связанное с ним содержимое.
    Например, следующая структура документа:

  <form action="http://localhost:8000/" method="post" enctype="multipart/form-data">
  <input type="text" name="myTextField">
  <input type="checkbox" name="myCheckBox">Check</input>
  <input type="file" name="myFile">
  <button>Send the file</button>
</form>

Запрашиваемая информация выглядит следующим образом:

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
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
Connection: keep-alive
Upgrade-Insecure-Requests: 1
// 以 ---------------------------8721656041911415653955004498 作为分割符
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465

-----------------------------8721656041911415653955004498
// 分段一 文本相关信息
Content-Disposition: form-data; name="myTextField"
// 对应value
Test
-----------------------------8721656041911415653955004498
// checkbox
Content-Disposition: form-data; name="myCheckBox"

on
-----------------------------8721656041911415653955004498
// 文件
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain

Simple file.
-----------------------------8721656041911415653955004498--
  • application/javascript application/x-javascript text/javascript
    Для файлов js общим типом MIME является text/javascript, но первые два должны быть видны. Между этими тремя есть некоторые различия.
    Тип MIME, соответствующий традиционной js-программе, — text/javascript, а остальные — «application/x-javascript» (префикс x указывает на то, что это экспериментальный тип), поскольку text/javascript является наиболее распространенным типом, поэтому RFC4329 определяет "текст/javascript". Однако файл js на самом деле не является настоящим текстовым типом, поэтому вводится тип application/javascript, но текущая поддержка не очень хороша, поэтому вместо него часто используется application/x-javascript.

  • application/zip application/gzip
    zip соответствует сжатым zip файлам, gzip — это аббревиатура нескольких программ сжатия файлов, обычно относится к реализации проекта GNU, где gzip означает GNU zip.

  • application/http
    Это не может быть общим для всех.По типу может быть известно, что это HTTP-запрос, но конкретное использование все еще нужно отклонить.Технические характеристикибыть найденным.
    HTTP-запрос, содержащийся в этом типе, содержится в двоичном теле сообщения, а Content-Transfer-Encoding необходимо указать при передаче по почтовому протоколу.
    Он будет встречаться при пакетной обработке запросов, и его производительность выглядит следующим образом:

--batch_0123456789
Content-Type: application/http
Content-ID: 
// 必须的字段,表明传送内容的编码格式 即二进制流
Content-Transfer-Encoding: binary

POST https://www.googleapis.com/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDimensions
Content-Type: application/json
Content-Length: 68

{
 "name": "Campaign Group",
 "scope": "SESSION",
 "active": true
} 

составной тип

Как упоминалось выше, multipart обычно соответствует одному заголовку сообщения, соответствующему нескольким телам сообщения. Общий синтаксис следующий:

Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p

Поле границы необходимо для различения границы данных в теле сообщения.Как правило, в качестве начала конца используется формат двух "-", например:

--gc0p4Jq0M2Yt08jU534c0p

Наше основное внимание сосредоточено на следующем:

  • multipart/form-dataСм. раздел приложений выше. Следующие части могут быть не такими распространенными, но вы все равно можете понять их, чтобы не запутаться, когда столкнетесь с ними.

  • multipart/mixed
    Этот тип используется, когда тело сообщения состоит из нескольких независимых частей и должно отображаться последовательно. И если какой-либо подтип данных имеет какой-либо тип, который не может быть распознан (здесь имеется в виду тип, который непосредственно распознается браузером, например, текст и т. д.), его следует смешать.
    В двух словах, электронное письмо имеет бинарное содержимое, а не прямо идентифицируемое содержимое.

Например:

POST /batch/farm/v1 HTTP/1.1
Authorization: Bearer your_auth_token
Host: www.googleapis.com
Content-Type: multipart/mixed; boundary=batch_foobarbaz
Content-Length: total_content_length

--batch_foobarbaz
// 子内容为http请求 不过是boundary编码过的
Content-Type: application/http
Content-ID: <item1:12930812@barnyard.example.com>

GET /farm/v1/animals/pony

--batch_foobarbaz
Content-Type: application/http
Content-ID: <item2:12930812@barnyard.example.com>

PUT /farm/v1/animals/sheep
Content-Type: application/json
Content-Length: part_content_length
If-Match: "etag/sheep"

{
  "animalName": "sheep",
  "animalAge": "5"
  "peltColor": "green",
}

--batch_foobarbaz
Content-Type: application/http
Content-ID: <item3:12930812@barnyard.example.com>

GET /farm/v1/animals
If-None-Match: "etag/animals"

--batch_foobarbaz--

Содержимое тела сообщения здесь — это http-запрос, который используется в протоколе пакетного интерфейса Google.

  • multipart/alternative
    Этот тип имеет тот же синтаксис, что и смешанный, но другую семантику. Это указывает на то, что разные части тела сообщения должны быть разными версиями одной и той же информации. То есть при одном и том же контенте типы передачи различны для разных получателей.
    Или пример:
From:  Nathaniel Borenstein <nsb@bellcore.com> 
To: Ned Freed <ned@innosoft.com> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

Если система пользователя распознает тип text/x-whatever, она увидит только эту часть. То, что видят разные пользователи, зависит от того, какие типы поддерживают их системы.

заключительные замечания

Ссылаться на

Developers.Google.com/drive/API/V…
developer.Mozilla.org/en-US/docs/…
Уууу. Руан Ифэн.com/blog/2008/0…
Woohoo. Я 3.org/protocols/th…

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