首页 > 解决方案 > 为什么我可以获取数据 URI?

问题描述

为什么fetch()适用于数据 URI?

前段时间,当我学习如何使用XMLHttpRequestandfetch时,我完全没有看到任何文档说明这些方法可以用于除 HTTP 请求之外的任何东西。我已经在 Firefox 和 Chrome 上尝试过这个并产生了相同的结果。自己试试。

(async function() {
  let dataURI = 'data:text/plain,' + encodeURIComponent('Why does this work?'),
  fetchResponse = await fetch(dataURI),
  fetchBlob = await fetchResponse.blob();
  console.log(URL.createObjectURL(fetchBlob));
})()

这最终简化了 Data URI 到 blob 的转换,而不是做类似这个问题的事情:

await(await fetch('data:text/plain,42').blob()

标签: javascriptblobdata-uri

解决方案


如果请求方法是 GET、、和about:blank,则fetch 算法允许向 发出请求。资源blob:data:file:http[s]:

由于 XMLHTTPRequest 执行同源请求,它甚至有进一步的限制,与 无关data:,但我在这个答案中描述。

因此获取data:URI 是完全有效的,它甚至是一种将此类 URI 转换为 Blob 的常用方法。


推荐阅读