【问题标题】:How do I prevent a CDN Location redirect for download from Azure from altering the browser location?如何防止从 Azure 下载的 CDN 位置重定向更改浏览器位置?
【发布时间】:2017-07-07 21:48:40
【问题描述】:

我正在使用 PHP Azure 库创建一个 SAS 令牌,用于在单击链接后将文件(文件存储、非 blob 和非公共)传递给经过身份验证的站点用户。该链接指向我创建 SAS 的 PHP 页面,然后发出 Location: 标头来调用下载。在最终完成下载之前,没有任何已知问题。

在所附图像中,重复了步骤 1-4。每个选择的文件都有一个。

问题在于,由于 URL 位于站点 (CDN) 外部,因此使用了 Location: $url + sas。这会改变浏览器的位置,但不会反映在浏览器中...标题将文件作为附件推送。

如前所述,用户可以继续单击原始页面上的其他下载链接,并且它们可以正常工作(这是可取的),但是当他们第一次选择同一页面上的任何链接以转到原始页面/站点上的其他位置时(如在示例中单击“主页”所示,浏览器的真实位置会显示(accountname.file.core.windows.net/etc),并且用户会收到来自 Azure 文件存储服务器的 Resource not found 错误。(显示在图表)

7.10.2017 添加了这张图片来说明使用的过程:

Link to SAS process chart

对于如何在不以这种方式“重置”浏览器位置的情况下从 CDN 推送 URL 下载时,我有点不知所措。我已经从本地服务器/文件多次执行此操作,但 Location: $url/SAS 方面是不同的动态。在我看来,这应该与将浏览器指向一个可公开访问的 URL 与一个推送下载的 EXE 没有什么不同,并且仍然允许用户在原始站点上说。我开始认为这应该是重定向而不是位置,但我还没有找到很多 Azure/SAS/文件存储示例来支持它。我必须在这里遗漏一些简单的东西,但它正在逃避我。

【问题讨论】:

    标签: php azure file-storage


    【解决方案1】:

    我不确定我是否理解正确,您似乎想通过使用 PHP 脚本从 Azure 存储下载文件而不更改浏览器中的 地址

    基本上,你可以使用下面的file_get_contents()函数来实现。

    header('Content-Type: application/octet-stream'); 
    header("Content-Disposition: attachment; filename=$filename");
    $response = file_get_contents($SASUri);
    
    echo $response;
    

    【讨论】:

    • 你好亚伦,谢谢。如果我错了,请纠正我,但我的理解是 php 将尝试通过我的服务器处理文件,这是不需要的。我只是试图通过 SASToken 将交付“移交”到 Azure 文件存储 CDN。我可以做到这一点,但是当他们单击除 CDN 之外的任何链接时,该过程正在为浏览器设置导航失败。我用插图的链接和我看到的错误更新了 OP。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2018-11-10
    • 2010-12-10
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多