Google api 当文件为公共文件时,Google Drive webContentLink不支持CORS

Google api 当文件为公共文件时,Google Drive webContentLink不支持CORS,google-api,google-drive-api,cors,Google Api,Google Drive Api,Cors,webContentLink应该是指向文件资源所表示的文件的直接链接。 让我们首先忽略一个事实,即链接实际上总是以302响应,指向生成的下载URL(其生命周期非常有限) 我知道,webContentLink指向的资源使用基于cookie的身份验证,CORS会带来安全风险,但是文档明确指出,当文件是公共文件时(显然),不需要身份验证。 因此,对于文件公开的情况,我不理解为什么不支持CORS 是否存在一些我没有意识到的与此相关的安全风险?缺陷在使用或不使用Access Control Allow O

webContentLink
应该是指向文件资源所表示的文件的直接链接。
让我们首先忽略一个事实,即链接实际上总是以302响应,指向生成的
下载URL
(其生命周期非常有限)

我知道,
webContentLink
指向的资源使用基于cookie的身份验证,CORS会带来安全风险,但是文档明确指出,当文件是公共文件时(显然),不需要身份验证。
因此,对于文件公开的情况,我不理解为什么不支持CORS

是否存在一些我没有意识到的与此相关的安全风险?缺陷在使用或不使用
Access Control Allow Origin
进行响应之前,检查文件的权限是否被视为工作量过大

另一方面,使用服务器端代理获取302位置指向的
downloadUrl
会生成一个确实支持CORS的资源。

这不是问题的解决方案,但使用GDrive托管功能,我能够在不使用服务器端代理的情况下绕过webContentLink的限制

https://googledrive.com/host/shared_folder_id/relative_path

该链接将是指向该文件的直接链接,资源支持CORS。但是,这有一个限制,即文件名在其自己的文件夹中必须是唯一的,否则它将不起作用。

这不是问题的解决方案,但使用GDrive托管功能,我可以绕过webContentLink的限制,而无需使用服务器端代理

https://googledrive.com/host/shared_folder_id/relative_path


该链接将是指向该文件的直接链接,资源支持CORS。但是,这有一个限制,即文件名在其自己的文件夹中必须是唯一的,否则将无法工作。

您需要在用户端或服务器端下载文件吗?如果用户使用浏览器进行WebContent链接就足够了?如果您想对文件执行特定操作,并且如果您的应用程序已经在使用api(我猜这就是您获取url的方式),则可以使用下载url(而不是WebContent链接)发出经过身份验证的get请求(是的,即使文件是公共的,请求也必须经过身份验证)获取文件。该链接将在获取链接后无限期使用,因此取而代之的是获取
下载URL
,因为它的使用寿命只有8小时。不,当指向的文件是公开的时,不需要身份验证,问题是webContentLink不支持CORS,因此无法在用户浏览器中访问。如果文件是公开的,您可以调用API方法,如files.get,而无需进行身份验证,但是要调用DownloadUrl,您确实需要进行身份验证。我还发现,使用files.get而不进行身份验证时获得的下载URL不起作用,如果您在进行身份验证时进行相同的调用,则URL不同,现在可以工作。如你所说,如果你需要永久地拥有这个链接,这个Url将不会有用。你能再解释一下你的用例吗?您是否正在网站中显示该文件?您如何向用户呈现文件信息?您正在创建链接吗?API不是一个选项,因为它总是需要OAuth 2.0身份验证。问题不在于实现该特性,我找到了一种绕过问题中提到的限制的方法。问这个问题的原因是让谷歌员工回答这个行为是错误还是故意的,但也让人们了解可能存在的安全问题,从而证明缺乏CORS支持是合理的。哦,好的,没关系。如果您有解决方案,您是否能够发布导致错误的原始实现以及解决方法?也许其他用户也在做同样的事情,可能会涉及到这个问题,甚至测试更好,复制问题的步骤是什么。您需要在用户端或服务器端下载文件吗?如果用户使用浏览器进行WebContent链接就足够了?如果您想对文件执行特定操作,并且如果您的应用程序已经在使用api(我猜这就是您获取url的方式),则可以使用下载url(而不是WebContent链接)发出经过身份验证的get请求(是的,即使文件是公共的,请求也必须经过身份验证)获取文件。该链接将在获取链接后无限期使用,因此取而代之的是获取
下载URL
,因为它的使用寿命只有8小时。不,当指向的文件是公开的时,不需要身份验证,问题是webContentLink不支持CORS,因此无法在用户浏览器中访问。如果文件是公开的,您可以调用API方法,如files.get,而无需进行身份验证,但是要调用DownloadUrl,您确实需要进行身份验证。我还发现,使用files.get而不进行身份验证时获得的下载URL不起作用,如果您在进行身份验证时进行相同的调用,则URL不同,现在可以工作。如你所说,如果你需要永久地拥有这个链接,这个Url将不会有用。你能再解释一下你的用例吗?您是否正在网站中显示该文件?您如何向用户呈现文件信息?您正在创建链接吗?API不是一个选项,因为它总是需要OAuth 2.0身份验证。问题不在于实现该特性,我找到了一种绕过问题中提到的限制的方法。提出这个问题的原因是让谷歌员工回答这个行为是错误还是故意的,但同时也让人们了解