为什么当我在Web API中进行重定向时,它会在响应中发送值为-1的EXPIRES HEADER?

时间:2016-05-09 20:55:23

标签: c# asp.net asp.net-web-api

我认为这不是正确的行为,基于RFC 2616

  

格式是绝对日期和时间,由第3.3.1节中的HTTP-date定义;它必须采用RFC 1123日期格式:

     

过期="过期" ":" HTTP-日期   其使用的一个例子是

     

到期日:1994年12月1日星期四16:00:00 GMT   注意:如果响应包含具有最大值的Cache-Control字段   年龄指令(见第14.9.3节),该指令覆盖了   到期时间。

例如:

public class ValuesController : ApiController
{
    public IHttpActionResult Get()
    {
        return this.Redirect("http://localhost:60650/");
    }

}

然后,我打电话给Fiddler:

enter image description here

然后,我有两个响应,第一个是重定向(HTTP 302):

  

发现HTTP / 1.1 302   缓存控制:无缓存
  Pragma:no-cache
  到期:-1
  地点:localhost:60650
  服务器:Microsoft-IIS / 10.0
  X-AspNet-Version:4.0.30319
  X-SourceFiles:=?UTF-8?B?YzpcdXNlcnNcaWdvci5jYW1wb3NcZG9jdW1lbnRzXHZpc3VhbCBzdHVkaW8gMjAxNVxQcm9qZWN0c1xSZWRpcmVjdFRlc3RcUmVkaXJlY3RUZXN0XGFwaVx2YWx1ZXM =?=
  X-Powered-By:ASP.NET
  日期:2016年5月9日星期一20:35:37 GMT
  内容长度:0

为什么ASP.NET发送" Expires" HEADER在此重定向中的值为-1?

1 个答案:

答案 0 :(得分:2)

从您链接的RFC第14.21节开始:

  

HTTP / 1.1客户端和缓存必须处理其他无效日期格式,   特别是包括价值" 0",和过去一样(即"已经   过期"。)

换句话说,请不要忘记点击此网址会导致重定向这一事实。

如果您希望将其缓存(并将永久重定向结果发送到浏览器),请使用:

public IHttpActionResult Get()
{
    return this.RedirectPermanent("http://localhost:60650/");
}