具有自定义标头的MVC重定向

本文关键字:MVC 重定向 自定义 | 更新日期: 2023-09-27 18:26:15

希望这对其他人来说是个简单的问题。

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

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

它似乎是重定向的行为,去掉了我所有的自定义标题和重定向。

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

具有自定义标头的MVC重定向

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

其次,HTTP是无状态的,因此Authorization标头在某个时间点的某个响应中被发送这一事实对未来任何请求中发生的任何事情都没有影响。Web浏览器和其他HTTP客户端绕过HTTP的无状态特性,在服务器端使用会话,在客户端使用cookie。客户端将cookie与请求一起发送到服务器。cookie匹配服务器上会话存储中的一个项目,服务器加载该会话中的数据,使其看起来像是维护了状态。

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

FWIW,这里的基本前提,与不同的域共享身份验证状态,是像OAuth这样的技术正是为开发的。因此,指导未来的研究朝着这个方向发展。

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

选项:

  • 服务器端代理
  • 使用cookie而不是其他标头(如果它是同一个域,而不是您的情况每2)
  • 手动重定向客户端(可能还可以,因为您无论如何都在进行AJAX调用)