请求的内容类型标头包含的不仅仅是 MIME 类型,为什么

Request's content-type header contains more than the MIME type, why?

本文关键字:类型 MIME 不仅仅是 为什么 包含 请求      更新时间:2023-09-26

我注意到有时请求的content-type标头(例如,由Firefox发出)不仅包含有关MIME类型的信息,还包含有关编码的信息。

例如,当使用 AJAX 而不是

application/json

(我所期望的)火狐发送:

application/json; charset=UTF-8

我对此行为有很多疑问:

  1. 还有哪些其他"参数"(或"选项",或任何你称之为charset值)可能发生?
  2. application/json总是排在第一位,还是值以随机顺序出现(即,它也可以charset=UTF-8; application/json)?
  3. 分隔符总是;吗?
  4. 测试特定 MIME 类型的规范方法是什么?显然,仅比较标题是行不通的。有什么提示吗?还有比contentType === 'application/json || contentType.startsWith('application/json;')更好的东西吗?

PS:对于问题#4,我创建了一个单独的问题。请参阅获取整个字符串或子字符串,具体取决于特定字符

请参阅 HTTP 1.1 RFC

3.7 媒体类型

HTTP 在内容类型中使用 Internet 媒体类型 [17](部分) 14.17) 和 Accept(第 14.1 节)标头字段,以提供开放且可扩展的数据类型和类型协商。

   media-type     = type "/" subtype *( ";" parameter )
   type           = token
   subtype        = token Parameters MAY follow the type/subtype in the form of attribute/value pairs (as defined in section 3.6).

所以

  1. 没有固定的可能值列表
  2. 是的,类型应该排在第一位
  3. 分隔符;