ASP.NET-HTTP响应标头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET-HTTP响应标头相关的知识,希望对你有一定的参考价值。

Reponse Headers

理论上所有的响应头信息都应该是回应请求头的。但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到:

  1. Cache-Control:must-revalidate, no-cache, private。这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。 
    Cache-Control是响应头中很重要的信息,当客户端请求头中包含Cache-Control:max-age=0请求,明确表示不会缓存服务器资源时,Cache-Control作为作为回应信息,通常会返回no-cache,意思就是说,“不缓存就不缓存呗”;当客户端在请求头中没有包含Cache-Control时,服务端往往会定,不同的资源不同的缓存策略,比如说oschina在缓存图片资源的策略就是Cache-Control:max-age=86400,这个意思是,从当前时间开始,在86400秒的时间内,客户端可以直接从缓存副本中读取资源,而不需要向服务器请求。
  2. Connection:keep-alive,这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。关于长连接的更多知识,后面我再详细讲。
  3. Content-Encoding:gzip,告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
  4. Content-Type:text/html;charset=UTF-8,告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
  5. Date:Sun, 21 Sep 2014 06:18:21 GMT,这个是服务端发送资源时的服务器时间,刚开始我不知道GMT是格林尼治所在地的标准时间,以为是服务器的时间错了,还去服务器上查看过时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。
  6. Expires:Sun, 1 Jan 2000 01:00:00 GMT,这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。所以这个响应头是没有Cache-Control:max-age=***这个响应头准确的,因为max-age=date中的date是个相对时间,不仅更好理解,也更准确。
  7. Pragma:no-cache,这个含义与Cache-Control等同。
  8. Server:Tengine/1.4.6,这个是服务器和相对应的版本,只是告诉客户端服务器信息,没有更多的意思。
  9. Transfer-Encoding:chunked,这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
  10. Vary: Accept-Encoding,告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。

上面讲述了访问oschina时,服务器端发送回来的响应头信息,但是却并不全,下面这些也是常常会出现的,都很重要:

  1. Content-leng:资源长度,如果服务器响应头中没有Transfer-Encoding:chunked,也就是说如果资源不是分块传输的,那么这个字段就是必须的,因为如果服务器端不告诉客户端资源的长度,那么在Connection:keep-alive,也就是说客户端与服务器端是长连接时,客户端就无法确定资源在什么时候结束。所以这个响应头对于静态资源时必须的。
  2. Content-Range : 告诉客户端,这次发送的是资源的哪部门字节,通常值为 :bytes 100-1000 /5000。
  3. Cookie:用于标识客户端,跟踪客户端,存储用户信息、用户行为。
  4. Location:服务端将资源的真?实目的地放在这个响应头中,引导客户端重定向到这个地址去,如果服务器返回302,那么这个值是必须的,通常这个值是一个完整的url:www.oschina.net。
  5. WWW-Authenticate : 这个字段主要用在服务器资源是有访问限制的,通常客户端在访问服务器资源时,服务器会返回401,要求客户端发送认证信息,同时会告诉客户端如何将认证信息编码。这个响应头的值就是存储服务器告诉客户端编码的方式,通常是Basic-64编码。





以上是关于ASP.NET-HTTP响应标头的主要内容,如果未能解决你的问题,请参考以下文章

查看响应标头的工具[关闭]

transformResponse 标头参数 ($resource) 中缺少自定义响应的标头

Http-Server 如何创建请求标头和响应标头

从上游读取响应标头时如何修复上游发送的标头太大?

如何以角度读取 Http 响应标头

RestSharp 打印原始请求和响应标头