什么是HTTP中用于字节流的"content-type"?

77
当响应客户端的GET请求并返回一串字节流时,HTTP中应使用什么“content-type”?在这种情况下,信息载荷是使用Python的Pickle库序列化的对象。

1
请注意,所有内容都是“字节块”,但如果确实没有已知的MIME类型,则选择application/octet-stream是一个不错的选择。 - Evert
3个回答

119
你应该使用application/octet-stream

5
或者,作为另一种选择,根本不发送Content-Type头字段。 - Julian Reschke

6
您应该使用适当的MIME类型:
application/python-pickle

这是事实标准(这意味着它不是应用程序/腌制或应用程序/腌制-python)。
RFC2046陈述:
4.5.3.其他应用子类型 预计将来会定义许多“应用程序”的其他子类型。 MIME实现必须最少将任何未识别的子类型视为等同于“application/octet-stream”。
因此,对于一个非pickle感知系统,该流将看起来像任何其他八位字节流(您没有做任何会破坏现有应用程序的事情),但是对于pickle感知的系统,这是至关重要的信息。

9
不是“正确”的类型(它不在注册表中)。 - Julian Reschke
2
这是事实上的标准。RFC2046规定:4.5.3. 其他应用子类型预计将来会定义许多其他的"application"子类型。MIME实现至少必须将任何未识别的子类型视为等同于"application/octet-stream"。因此,对于一个不了解pickle的系统来说,该流将看起来像任何其他的八位字节流,但对于一个启用了pickle的系统来说,这是重要的信息。 - thedayofcondor
24
你能提供“这是事实上的标准”的参考资料吗? - bukzor

0
要将一个字节对象从Angular传递给Django,也可以通过从头部中删除content-type来实现,例如。
const httpOptions =  {headers: new HttpHeaders({})}
const formData = new FormData();
formData.append('file', file);
this.http.post(myAPI(), formData, httpOptions).subscribe(

其中file是一个字节对象,例如用户上传的(pickle)文件。

使用application/octet-stream可能会抛出415 Unsupported media Type in http.post Angular request错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接