我正在尝试使用客户端JavaScript处理OneDrive文件,但首先需要一种使用XMLHttpRequest下载文件的方法。 OneDrive支持许多操作的cors,但是对于将文件下载到JavaScript中,存在以下问题:
如onedrive rest api manual所述,
我可以发送请求到:
GET https://apis.live.net/v5.0/FILE_ID/content?access_token=ACCESS_TOKEN 它会回复一个位置头重定向浏览器到该文件。 问题是当我通过XHR发送这些请求时,浏览器总是发送Origin标头与请求一起发送。 对于我上面描述的第一个请求,OneDrive还会回复Access-Control-Allow-Origin:*标头,因此在浏览器中允许该请求。 然而,当浏览器被重定向到文件的实际位置时,该资源没有Access-Control-Allow-Origin标头,因此XHR请求被浏览器拒绝(chrome为重定向请求设置了null Origin标头)。
我还尝试过获取位置但不自动重定向,然后发送另一个XHR请求,这将把原始标头设置为我的站点域,但结果相同。正如我在开头提到的,我需要在javascript中处理数据,所以我不是在询问如何将onedrive文件下载到硬盘。我需要javascript在网页中访问该数据。
我知道我可以使用服务器端编程来获取文件数据并将其发送到客户端,但对于我的应用程序,这不是一个选项(至少目前不是我要求的内容)。
如果没有办法做到这一点,是否有人知道为什么他们会以这种方式实现他们的api?允许javascript通过cors获取位置并重定向,但不包括重定向资源的cors标头。为什么不一开始就拒绝cors?这是一个错误吗?
如onedrive rest api manual所述,
我可以发送请求到:
GET https://apis.live.net/v5.0/FILE_ID/content?access_token=ACCESS_TOKEN 它会回复一个位置头重定向浏览器到该文件。 问题是当我通过XHR发送这些请求时,浏览器总是发送Origin标头与请求一起发送。 对于我上面描述的第一个请求,OneDrive还会回复Access-Control-Allow-Origin:*标头,因此在浏览器中允许该请求。 然而,当浏览器被重定向到文件的实际位置时,该资源没有Access-Control-Allow-Origin标头,因此XHR请求被浏览器拒绝(chrome为重定向请求设置了null Origin标头)。
我还尝试过获取位置但不自动重定向,然后发送另一个XHR请求,这将把原始标头设置为我的站点域,但结果相同。正如我在开头提到的,我需要在javascript中处理数据,所以我不是在询问如何将onedrive文件下载到硬盘。我需要javascript在网页中访问该数据。
我知道我可以使用服务器端编程来获取文件数据并将其发送到客户端,但对于我的应用程序,这不是一个选项(至少目前不是我要求的内容)。
如果没有办法做到这一点,是否有人知道为什么他们会以这种方式实现他们的api?允许javascript通过cors获取位置并重定向,但不包括重定向资源的cors标头。为什么不一开始就拒绝cors?这是一个错误吗?