【发布时间】:2019-10-31 15:39:34
【问题描述】:
我正在编写代码以在 Node.js 环境中通过 HTTP/HTTPS 读取任意 Web 资源,当它是文本数据时,我想将内容作为字符串返回,当它是二进制数据时,我想作为缓冲区返回。
很明显,任何以text 开头的东西,例如text/html,都是最好以字符串形式返回的文本数据——当然,使用适当的字符编码,可以明确定义(例如text/html; charset=utf-8),或者可能不是。此外,charset 的任何显式定义都将表明内容是文本,而不是二进制,无论 MIME 类型如何。
据我所知,几乎其他一切都是二进制数据。我知道的所有音频和视频格式都是二进制的,几乎所有的图像类型,image/svg+xml 除外。似乎大多数application/... 类型都是二进制的,但也有一些值得注意的常见例外,例如application/json。
以下功能是否似乎足以确定问题?如果没有,我可能会遗漏哪些值得注意的例外情况?
function isBinary(contentType: string): boolean {
let $: string[];
if (/;\s*charset\s*=/i.test(contentType))
return false;
// Remove anything other than MIME type.
contentType = contentType.replace(/;.*$/, '').trim();
if (/^text\//i.test(contentType) || /\+xml$/i.test(contentType))
return false;
else if (($ = /^application\/(.+)/i.exec(contentType)))
return !/^(javascript|ecmascript|json|ld\+json|rtf)$/i.test($[1]);
else
return true;
}
【问题讨论】:
标签: typescript http mime-types content-type