YAML哑剧型?

Jon*_*ram 101 mime yaml http mime-types

在通过HTTP发送使用YAML构建的数据时,最合适的MIME类型是什么?

解释为什么给定的选择是最合适的将是非常感谢.

我没有注册的应用程序类型文本类型.

例:

> GET /example.yaml

< Content-Type: ????
<
< --- # Favorite movies
< - Casablanca
< - North by Northwest
< - Notorious
Run Code Online (Sandbox Code Playgroud)

可能的选择:

text/yaml
text/x-yaml
application/yaml
application/x-yaml
Run Code Online (Sandbox Code Playgroud)

Vin*_*vic 59

Ruby on Rails使用(source)application/x-yaml替代.text/yaml

我认为这只是一个惯例问题,据我所知,没有技术上的原因.

  • 这不是_quite_ true.除非明确声明另一个mime类型(例如`text/html; charset = utf-8`),否则以`text /`开头的Mime类型将被处理为ISO-8859-1.除非显式声明另一个mime类型,否则以`application /`开头的Mime类型将被处理为UTF-8.例如,`text/x-yaml`不能使用UTF-8字符而`text/x-yaml; charset = utf-8`和`application/x-yaml`可以.IIRC,这在RFC 3023中定义. (70认同)
  • RFC 3023(包括编码处理)已于2014年由https://tools.ietf.org/html/rfc7303#section-3废弃.对于RFC 2046中的`text/*`媒体类型,默认为"US-ASCII"(注意:不是`ISO-8859-1`)的规则已被废弃."无论选择何种方法,所有新文本/*注册必须明确说明如何确定字符集; 在2013年1月的https://tools.ietf.org/html/rfc6838#section-4.2.1中,不再允许依赖于[RFC2046]第4.1.2节中定义的US-ASCII默认值.无法通过RFC 3023 RFC 7303也没有说出关于`text/*`AFAIK的一般信息. (6认同)
  • @RyanParman所以你的结论可能是正确的,但你错误地引用了RFC 3023,而规则来自RFC 2046.今天,`UTF-8`是每个`text/*`媒体类型的默认值在IANA注册中有所不同. (5认同)
  • @RyanParman不对.https://tools.ietf.org/html/rfc6838#section-4.2.1说:`如果指定了"charset"参数,它应该是必需参数,从而消除了指定默认值的选项.如果有一个强有力的理由让参数尽可能是可选的,那么每个子类型都可以指定它自己的默认值,或者它可以指定没有默认值.最后,应该选择"UTF-8"字符集[RFC3629]作为默认值."text/yaml"和"text/x-yaml"没有正式定义,因此默认值为UTF-8. (3认同)
  • @RyanParman你有点混淆字符集和MIME类型.你是对的,没有明确的`charset =`参数的`text/*`被认为是ISO-8859-1,但`application/*`中的东西不一定是文本.(您链接的RFC是关于XML的,不确定它是如何相关的.) (2认同)

djb*_*djb 18

虽然另一个答案被接受,请参阅本为YAML提议的媒体类型的注册线程IANA邮件列表上审查媒体类型在本哈里斯,剑桥信息服务,大学提出的代表YAML队的媒体类型的2015年7月:

text/vnd.yaml
Run Code Online (Sandbox Code Playgroud)

使用(建议)弃用的别名:

text/yaml
text/x-yaml
application/x-yaml
Run Code Online (Sandbox Code Playgroud)

那仍然是提议/待决(线程没有表明提案的状态)所以这个答案不比其他人更明确:-)

  • 从2018年1月开始,该提案似乎无处可去,我与作者联系的尝试没有得到答复 (9认同)
  • 该提案已更新为 application/yaml。他们正在弃用 text/yaml 并且不鼓励使用“x-”。但是 text/yaml 会导致浏览器显示而不是下载,所以我认为他们弃用该媒体类型是错误的。 (3认同)

Gre*_*reg 15

我会说text/x-yaml:

应用程序上的文本因为它是人类可读的

yaml上的x-yaml因为它尚未被接受到mime类型的注册列表中.

编辑:来自RFC 3023(XML媒体类型):

顶级媒体类型"text"对MIME实体有一些限制,它们在[RFC2045]和[RFC2046]中有所描述.特别是,不允许使用UTF-16系列,UCS-4和UTF-32(除了HTTP [RFC2616],它使用类似MIME的机制).

有趣......不完全确定它意味着什么,但值得深思.

  • ...但是 JSON 不是人类可读的吗?我认为说“application/yaml”会更一致,就像我们可能说“application/json”和“applicaiton/xml”一样。 (3认同)

Giu*_*lio 13

在 Chrome 上application/yaml会下载,而text/yaml会显示。


Rob*_*lli 13

IETF 正在努力注册application/yaml媒体类型和+yaml结构化语法后缀。

目前,我们还没有注册text/yamlhttps://github.com/ietf-wg-httpapi/mediatypes/blob/main/draft-ietf-httpapi-yaml-mediatypes.md

欢迎参与讨论。


Jul*_*hke 6

不鼓励使用"x-"媒体类型,请参阅RFC 4288,第3.4节.正确的做法是使用个人树,供应商树,或实际尝试正确的媒体类型注册.

  • 也不完全正确。唯一无需向 IANA 注册即可使用的子类型树是“x.”。`vnd.` 和 `prs.` 需要注册。请参阅 https://tools.ietf.org/html/rfc6838#section-3.2 和 https://tools.ietf.org/html/rfc6838#section-3.3 。 (3认同)