C# 为什么在Web API中重定向时,它会在响应中发送值为-1的EXPIRES头?

C# 为什么在Web API中重定向时,它会在响应中发送值为-1的EXPIRES头?,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我认为这不是正确的行为,基于 格式为第3.3.1节中HTTP日期定义的绝对日期和时间;必须采用RFC 1123日期格式: Expires=“Expires”“:”HTTP日期 其使用的一个例子是 有效期:1994年12月1日星期四格林威治标准时间16:00:00 注意:如果响应包含具有最大值的缓存控制字段- age指令(见第14.9.3节),该指令覆盖 过期字段 例如: public class ValuesController : ApiController { public IHtt

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

格式为第3.3.1节中HTTP日期定义的绝对日期和时间;必须采用RFC 1123日期格式:

Expires=“Expires”“:”HTTP日期 其使用的一个例子是

有效期:1994年12月1日星期四格林威治标准时间16:00:00 注意:如果响应包含具有最大值的缓存控制字段- age指令(见第14.9.3节),该指令覆盖 过期字段

例如:

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

}
然后,我通过Fiddler打电话:

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

找到HTTP/1.1 302
缓存控制:无缓存
Pragma:没有缓存
过期:-1
位置:localhost:60650
服务器:Microsoft IIS/10.0
X-AspNet-Version:4.0.30319
X-SourceFiles:=?UTF-8?B?YZPCDXNLCNNCAWDVCI5JYW1WB3NCZG9JDW1LBNRZXHZPC3VHBCBZDHVKAW8GMJAXNVXQCM9QZWN0C1XSZWRPCMVJDLC3RCUMVKAXJLY3RUZXN0xGFWAVX2YWX1ZXM=?=
X-Powered-By:ASP.NET
日期:2016年5月9日星期一20:35:37 GMT
内容长度:0


为什么ASP.NET在此重定向中发送值为-1的“Expires”标头?

来自您链接的RFC第14.21节:

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

换句话说,不要缓存命中此URL会导致重定向的事实

如果要缓存它(并将结果永久重定向到浏览器),请使用:


从您链接的RFC第14.21节:

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

换句话说,不要缓存命中此URL会导致重定向的事实

如果要缓存它(并将结果永久重定向到浏览器),请使用:


在这种情况下,“HTTP/1.1客户端和缓存”将是那些使用此API的用户?例如浏览器或其他系统?@igorcompos是的,它包括浏览器、应用程序和搜索爬虫程序。它还包括代理服务器和缓存服务器,从技术上讲,它们不是API的最终使用者,但RFC仍然要求它们也不缓存结果。当您知道并控制重定向url更改的间隔时,希望缓存临时重定向是完全正确的。但是不能从服务器端更改永久重定向,因此请注意使用
RedirectPermanent()
。在这种情况下,“HTTP/1.1客户端和缓存”将是使用此API的用户?例如浏览器或其他系统?@igorcompos是的,它包括浏览器、应用程序和搜索爬虫程序。它还包括代理服务器和缓存服务器,从技术上讲,它们不是API的最终使用者,但RFC仍然要求它们也不缓存结果。当您知道并控制重定向url更改的间隔时,希望缓存临时重定向是完全正确的。但是不能从服务器端更改永久重定向,所以要小心使用
RedirectPermanent()
public IHttpActionResult Get()
{
    return this.RedirectPermanent("http://localhost:60650/");
}