HTTP 常用响应头信息

2019-04-24 12:57|来源: 网路

HTTP 响应头信息

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。

在本章节中我们将具体来介绍HTTP响应头信息。

应答头 说明
Allow

服务器支持哪些请求方法(如GET、POST等)。

Content-Encoding

文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

Content-Length

表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

Content-Type

表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

Date

当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

Expires

应该在什么时候认为文档已经过期,从而不再缓存它?

Last-Modified

文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

Location

表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

Refresh

表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。
注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。

注意Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。

注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。

Server

服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。

Set-Cookie

设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。

WWW-Authenticate

客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。
注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

相关问答

更多
  • 你不需要一个ResponseInterceptor来做到这一点。 您只需将fullResponse设置为true即可在每次请求时获得整个响应(包括http标头)。 Restangular.setFullResponse(true); 您可以在应用程序配置中全局设置它。 像这样的东西: angular.module('YourApp') .config(['RestangularProvider', function (RestangularProvider) { ...
  • HTTP RFC2616可以在这里说: 当且仅当该标题字段的整个字段值被定义为逗号分隔列表[即#(值)]时,具有相同字段名称的多个消息头字段可以存在于消息中。 必须可以通过将每个后续字段值附加到第一个,每个以逗号分隔,将多个标题字段组合成一个“字段名称:字段值”对,而不改变消息的语义。 因此,接收到具有相同字段名称的报头字段的顺序对于组合的字段值的解释是重要的,因此当消息被转发时,代理不得改变这些字段值的顺序 因此,如果整个字段值被定义为逗号分隔的值列表,那么同名的多个标题可以(www-authentica ...
  • 事实上,在您的情况下,您需要返回响应对象本身而不仅仅是有效负载。 为此,您要删除地图运算符: fetch(url){ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.get(url, options); } } 在你的组件中: @Inpu ...
  • 您只需要相应地设置状态代码和消息。 您确实为两种情况设置了SC_ACCEPTED。 顺便说一句。 SC_ACCEPTED是202.对于“未找到任何结果”,您可以使用SC_NOT_FOUND (404); 或者你可以使用整数 您可以在此处找到SC_...值。 如果要发送消息和json,可能需要将json字符串嵌入到消息中。 否则,您可能只需要在正文中发送json并将消息移动到标头中的HTTP状态描述。 方法sendError(int sc, String msg)创建一个类似HTML的页面,其中嵌入了您的消息 ...
  • 用于压缩请求的相同的一般机制适用于响应。 再次,标题本身不可压缩...只有响应内容可以在符合HTTP 1.1的实现中压缩。 指定服务器应该压缩响应的方式是设置“Accept-encoding”标头,如HTTP 1.1规范的第14.3节所述。 但是,您将受到服务实施方的支配,是否会为您压缩响应。 如果服务器无法按照您的要求进行压缩,则可能会发送406不可接受的响应。 另外,一个服务器端的HTTP实现可能会忽略你的Accept- *头并且发送未压缩的响应。 The same general mechanisms ...
  • 压缩HTTP请求标头或响应标头不符合HTTP 1.1标准。 这里所说的是对如何制定这样一个方案的一些分析: 1)也许他们的意思是你可以使用其他一些自定义http方案来完成它,比如说httpc:// 。 我还可以声称,在5个批次中向同一服务器发送请求和响应也会增加Web的速度。 我称这个方案为httpBrian:// 。 2)如果您假设它们仅表示HTTP响应标头,则在请求标头中您可以使用另一个标头,指定您希望响应作为不合规的HTTP响应。 我想这可能会遇到代理等问题。 3)如果您假设它们仅表示PARTIAL ...
  • HTTP / 2网站通常使用TLS,因为浏览器仅通过TLS支持HTTP / 2。 您尝试使用的方法是HTTP / 1.1升级到HTTP / 2,很少有站点(如果有的话)支持。 您的代码片段代表请求 ,而不是响应。 如果升级成功,HTTP / 2服务器将以HTTP / 1.1格式发回101响应, 并以HTTP / 2格式发送对GET请求的响应。 这在RFC 7540第3.2节中规定。 为了实现您想要的,即知道网站是否支持HTTP / 2,您必须尝试使用HTTP / 2 + TLS进行连接。 如果连接成功,则表 ...
  • 如果您的要求很简单, WebClient会有很长的路要走: string result; using(var client = new WebClient()) { client.Proxy = ... result = client.DownloadString(uri); } 另见: DownloadData等 If your requirements are simple, WebClient goes a long way: string result; using(var cli ...
  • 这是一个无意义的请求,是的。 您可以使用HttpHeadersMore模块删除大多数响应标头。 这样的事情应该这样做: location /your/api/path { more_clear_headers '*'; } 但是,如果不修补nginx ,则无法删除Connections标头。 即使你可以,你也无法删除响应的第一行(在这种情况下为“HTTP / 1.1 200 OK”)。 没有该行,它不是HTTP响应。 您将很难说服HTTP服务器发送非HTTP响应。 为了得到你所描述的内容,我认为你需要 ...
  • 那是因为hContentLength只是一个不区分大小写的字符串,而不是函数。 你不能申请它。 但是,由于CI a是任何Eq a的Eq实例,因此您只需使用lookup : getContentLength :: ResponseHeaders -> Maybe ByteString getContentLength = lookup hContentLength That's because hContentLength is just a case-insensitive string, not a f ...