转发URL并在ASPX中仍然返回200而不是302

时间:2008-10-28 05:49:45

标签: asp.net http url http-headers http-status-code-302

我希望此页面在仍然发送重定向时返回200 ...

<script>
    sub page_load
        'Get the parameters
         dim content As String
         content = request.querystring("text")
         response.redirect ("http://100.200.100.10/test1/Default.aspx?CommandParm=" + content)
    end sub
</script>
<html>
    <head>
    </head>
    <body>
        <form runat="server">
        </form>
    </body>
</html>

4 个答案:

答案 0 :(得分:2)

@eyelidlessness @

我同意这似乎是一个糟糕的可用性选择,但我希望这是一个无法直接修复的问题的解决方法。

鉴于此,请尝试META refresh,例如,

<meta http-equiv="refresh" content="5;url=http://example.com/"/>

并嵌入一条消息,说明登陆此页面的不幸用户所发生的事情。

  

我在发帖时可能没有解释自己。这实际上是一个B2B交易。没有最终用户使用浏览器。第三方发送HTTP GET。我们要做的就是将其作为合法交易转发。

然后你应该发送一个301或302 - 这就是他们设计要处理的确切目的。

答案 1 :(得分:1)

您可以通过javascript重定向此页面

首先,通过制作以下字符串

来创建动态javascript
<script type"text/javascript">
<!--
function redirect()
{
   window.location = "http://100.200.100.10/test1/Default.aspx?CommandParm=" + content
}
//-->
</script>

其次,将javascript添加到当前页面的标题中。

然后,将javascript添加到正文

mybody.Attributes.Add("onload", "redirect()");

当您浏览当前页面时,它将返回HTTP 200,并且在onload事件触发后,浏览器将调用redirect(),您的浏览将位于目标页面中。

好奇为什么你需要这个?!

答案 2 :(得分:1)

你不能同时拥有它:Redirect和Status 200。

RFC2616status code 200

  

10.2.1 200 OK

     

请求已成功。响应返回的信息取决于请求中使用的方法,例如:

     
      
  • GET :在回复中发送与请求的资源对应的实体;
  •   
  • HEAD :响应中发送与请求资源对应的实体标头字段,没有任何消息体;
  •   
  • POST :描述或包含操作结果的实体;
  •   
  • TRACE :包含终端服务器收到的请求消息的实体。
  •   

因此除了发送由用户代理解释的一些内容之外,没有重定向的空间,例如, JavaScript到浏览器。

规范中的this is the part告诉我们使用状态代码301,302或303进行重定向:

  

10.3.2 301永久移动

     

已为所请求的资源分配了一个新的永久URI,并且此资源的任何将来的引用应该使用返回的URI之一。具有链接编辑功能的客户端应尽可能自动将对Request-URI的引用重新链接到服务器返回的一个或多个新引用。除非另有说明,否则此响应是可缓存的。

     

新的永久URI应该由响应中的Location字段给出。除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释。

     

如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变请求的条件。发出的。

     

注意:在收到301状态代码后自动重定向POST请求时,某些现有的HTTP / 1.0用户代理会错误地将其更改为GET请求。

     

10.3.3 302找到

     

请求的资源暂时驻留在不同的URI下。由于重定向有时可能会被更改,因此客户端应该继续使用Request-URI来处理将来的请求。如果由Cache-Control或Expires标头字段指示,则此响应仅可缓存。

     

临时URI应该由响应中的Location字段给出。除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释。

     

如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。

     

注意:RFC 1945和RFC 2068指定不允许客户端更改重定向请求上的方法。但是,大多数现有的用户代理实现将302视为303响应,对Location字段值执行GET,而不管原始请求方法如何。已经为希望明确说明客户期望哪种反应的服务器添加了状态代码303和307.

     

10.3.4 303见其他

     

可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法检索。此方法主要用于允许输出POST激活的脚本以将用户代理重定向到选定的资源。新URI不是最初请求的资源的替代引用。 303响应绝不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

     

不同的URI应该由响应中的Location字段给出。除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释。

     

注意:许多pre-HTTP / 1.1用户代理不了解303状态。当需要考虑与此类客户端的互操作性时,可以使用302状态代码,因为大多数用户代理会对302响应做出反应,如此处针对303所述。

答案 3 :(得分:0)

Response.Redirect()没办法。我认为。可能在调用Response.Status = "200 OK"后设置Redirect()有效,我从未尝试过。

您可以通过在其他空响应中手动设置“位置”标头来伪造它。但不确定这对什么有好处。 ; - )

Response.AddHeader("Location", "http://100.200.100.10/test1/Default.aspx?CommandParm=" + content)
Response.End()

(并且,对于记录:您将生成无效的HTTP标头星座。不应该破坏任何东西,但仍然。)