7

希望这对那里的人来说是一个简单的问题。

基本上在收到对我的 MVC 控制器的请求后,我想:

  1. 在响应中添加“授权”标头
  2. 重定向到另一个域上的另一个应用程序
  3. 阅读此外部站点上的“授权”标题。

看起来重定向的行为,去掉了我所有的自定义标题和重定向。

我的问题是,如何添加新标头并执行重定向,并让该标头显示在标头中以供接收主机 [在重定向结束时] 读取?

4

2 回答 2

10

你不能。这不是 HTTP 的工作方式。首先,“重定向”只是一个 301、302 或(从 HTTP 1.1 起)307 状态代码,其Location标头设置为客户端应该访问的 URL。向该 URL 发起请求的是客户端,因此您无法控制它们发送的标头。

Authorization其次,HTTP 是无状态的,因此在某个时间点在某个响应中发送标头这一事实与任何未来请求中发生的任何事情都零影响。Web 浏览器和其他 HTTP 客户端通过使用服务器端的会话和客户端的 cookie 来绕过 HTTP 的无状态特性。客户端将 cookie 与请求一起发送到服务器。cookie 匹配服务器上会话存储中的一个项目,服务器从该会话加载数据,以呈现好像状态保持不变的外观。

第三,cookie 在这种情况下不起作用,因为它们是域绑定的,并且不会与请求一起发送到它们不是来自的域。因此,即使您要创建会话来维护授权,其他站点也永远不会看到它。

FWIW,这里的基本前提,与不同的域共享身份验证状态,正是OAuth 等技术的开发目的。因此,将未来的研究引向那个方向。

于 2013-08-02T21:14:10.420 回答
2

否 - 302 重定向由浏览器处理,它不会重新附加标头。

选项:

  • 服务器端代理
  • 使用 cookie 而不是其他标头(如果它是同一个域,而不是你的情况每 2)
  • 手动重定向客户端(可能没问题,因为无论如何您都在进行 AJAX 调用)。
于 2013-08-02T21:09:14.580 回答