【问题标题】:Preserve HTTP header after redirection重定向后保留 HTTP 标头
【发布时间】:2011-09-14 03:39:35
【问题描述】:

我正在尝试通过我的 ASP.Net 应用从 Google Docs 下载文件。

由于我使用的是 OAuth,因此我生成了一个签名并输入了授权字符串。

从 Google Docs 文档中,要访问它的资源,我需要添加:

Authorization: <authorization string>

在请求头中。

我写了一个sn-p来做重定向:

context.Response.AddHeader("GData-Version", "3.0");
context.Response.AddHeader("Host", downloadLinkUrl.Host);
context.Response.AddHeader("Authorization", authorizaString);
context.Response.RedirectLocation = downloadLink;
context.Response.Redirect(downloadLink);

它重定向到 downloadLink,但缺少 Header 信息,从 Firebug 中可以看出。因此我得到 401 Not Authorized。

一些read up 说这是不可能的。周围有什么黑客吗?

谢谢。

【问题讨论】:

    标签: asp.net http-headers response.redirect


    【解决方案1】:

    您不能转发标头。您唯一的选择是尝试在重定向页面上使用 jQuery/javascript 添加标头,然后发出 GET 请求。我什至不确定你是否可以,因为 AJAX 请求不能用于文件下载。

    实际上.. 我认为这也行不通。所以 - 我不得不说不,你不能这样做来下载文件。但是,您可以从服务器发出请求,然后将其流式传输到客户端吗?

    编辑 我过去回答过这个问题: jQuery delivery of a file with AJAX call

    由于 jQuery get 是 .ajax 的简写形式 - 这可以通过指定 'get' 的 jQuery ajax 调用来工作。试一试,让我们知道结果。

    http://api.jquery.com/jQuery.ajax#options

    部分代码见: Pass request headers in a jQuery AJAX GET call

    【讨论】:

    • 这是最初的计划,但是将文件从 Google Docs 流式传输到我的服务器,然后从我的服务器到客户端浏览器,需要双倍的时间。
    • 经过 5 小时的尝试,如果我请求自己的网站,但无法请求其他网站(在我的情况下是 Google Docs),则 jQuery 方法有效,因为某些东西称为“同源策略”。还有其他解决方法吗?
    • 啊 cr@ppers。对不起。我没有考虑跨域调用,但是是的,这是一个有效的问题。恐怕我能想到的唯一解决方法是实际在本地流式传输,然后到客户端。客户端没有其他方法可以注入这些标头。他们可以通过异步请求从您的站点请求。页面请求有助于将 IIS 从冗长的处理时间中解放出来。您的处理程序将依次下载文件并将其流式传输到客户端。另一种选择是调查您是否可以将令牌添加到 URL 或 google 文档可以使用的 cookie。
    • 没关系,你给了我足够的帮助。我目前正在下载到服务器,然后流式传输到客户端浏览器,使用一些 javascript 将下载按钮更改为“准备下载”以应对额外的等待时间。感谢您的帮助。
    【解决方案2】:

    在 express.js 中,可以使用标头和 cookie 来重定向响应:

    res.set('mykey', 'myvalue');
    res.set('Access-Control-Expose-Headers', 'Set-Cookie, mykey');
    res.cookie('mykey', 'myvalue', { maxAge: 900000, httpOnly: true });
    res.redirect(302, url);
    

    我相信 .NET 也有类似的东西。

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多