HTTP请求和响应头

HTTP 请求
  一个 HTTP 请求包含三个部分:
Method-URI-Protocol/Version 方法-地址-版本
Request header 请求头
Entity body 请求实体
  下面是一个 HTTP 请求实例:
POST /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: localhost/ch8/SendDetails.htm
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
LastName=Franks&FirstName=Michael
  The Method-URI-Protocol/Version 在这个请求的第一行:
POST /servlet/default.jsp HTTP/1.1
  其中 POST 是请求的类型。每个客户端 HTTP 请求可以是 HTTP 规范中指定的许多请求类型中的一种。HTTP 1.1 支持七种类型的请求,它们是 GETPOSTHEADOPTIONSPUTDELETETRACE。其中 GET POST Internet 应用中经常用到的二种请求类型。
  URI 完整地指定了 Internet 资源。一个 URI 通常被解析为相对服务器的根目录。这样,它应该总是以一个 '/' 前缀开始。一个 URL 实际上是 URI 的一种类型。
  Version 指的是该 HTTP 请求所用到的 HTTP 协议版本。
  请求头包含了客户端环境与请求实体的一些有用的信息。例如它包含浏览器设定的语言、实体的长度等等。每条请求头用回车换行符(CRLF)分开。
  一个非常重要的空行分开了请求头与实体,它标志着实体内容的开始。一些 Internet 开发书籍认为这个 CRLF 空行是 HTTP 请求的第四个部分。
  在上面的 HTTP 请求中,实体只是简单以下的一行:
LastName=Franks&FirstName=Michael
  在一个典型的 HTTP 请求中,请求实体内容会长得多。
HTTP 响应
  与请求相似,HTTP 响应也由三部分组成:
Protocol-Status code-Description 协议状态 描述代码
Response headers 响应头
Entity body 响应实体
  以下是一个 HTTP 响应的实例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112
<html>
<head>
<title>HTTP Response Example</title></head><body>
Welcome to Brainy Software
</body>
</html>
  响应头的第一行类似请求头的第一行,告诉你所用的协议是 HTTP 1.1 ,请求成功(200=success),以及没有任何问题。
  响应头类似请求头也包含了一些有用的信息。响应的实体响应本身的 HTML 内容。头与实体之间由回车换行的空行(CRLF)分开。

最常见的请求头:
Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzipServlet能够向支持gzip的浏览器返回gzip编码的HTML页面。许多情形下这可以减少510倍的下载时间。
Accept-Language:浏览器所期望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。假如Servlet看到这里的值为“Keep-Alive”,或者看到请求运用的是HTTP 1.1HTTP 1.1默认进行持久连接),它就可以利用持久连接的长处,当页面包含多个元素时(例如Applet,图片),显着地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
From:请求发送者的email地址,由一些非凡的Web客户顺序运用,浏览器不会用到它。
Host:初始URL中的主机和端口。
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304Not Modified”应答。
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即便它是代理服务器而且已经有了页面的本地拷贝。
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,假如Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-PixelsUA-ColorUA-OSUA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜深度、操作系统和CPU类型。
  有关HTTP头完整、具体的阐明,请参见/Protocols/HTTP规范。
  5.2 Servlet中读取请求头
  Servlet中读取HTTP头是非常方便的,只需要调用一下HttpServletRequestgetHeader方法即可。假如客户请求中提供了指定的头信息,getHeader返回对应的字符串;否则,返回null。部分头信息经常要用到,它们有专用的访问方法:getCookies方法返回Cookie头的内容,经解析后存放在Cookie对象的数组中,请参见后面有关Cookie章节的讨论;getAuthTypegetRemoteUser方法分别读取Authorization头中的一部分内容;getDateHeadergetIntHeader方法读取指定的头,然后返回日期值或整数值。
  除了读取指定的头之外,利用getHeaderNames还可以得到请求中所有头名字的一个Enumeration对象。
  最后,除了查看请求头信息之外,我们还可以从请求主命令行获得一些信息。acceptlanguagegetMethod方法返回请求方法,请求方法通常是GET或者POST,但也有可能是HEADPUT或者DELETEgetRequestURI方法返回URIURIURL的从主机和端口之后到表单数据之前的那一部分)。getRequestProtocol返回请求命令的第三部分,一般是“HTTP/1.0”或者“HTTP/1.1”。
  5.3 实例:输出所有的请求头
  下面的Servlet实例把所有接收到的请求头和它的值以表格的形式输出。另外,该Servlet还会输出主请求命令的三个部分:请求方法,URI,协议/版本。
  ShowRequestHeaders.java
package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
import java.util.*;
public class ShowRequestHeaders extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = Writer();
String title = "显示所有请求头";
out.println(ServletUtilities.headWithTitle(title) +
"BODY BGCOLOR="#FDF5E6">\n" +
"H1 ALIGN=CENTER" + title + "/H1>\n" +
"BRequest Method: /B" +
Method() + "BR>\n" +
"BRequest URI: /B" +
RequestURI() + "BR>\n" +
"BRequest Protocol: /B" +
Protocol() + "BR><BR>\n" +
"TABLE BORDER=1 ALIGN=CENTER>\n" +
"TR BGCOLOR="#FFAD00">\n" +
"THHeader NameTHHeader Value");
Enumeration headerNames = HeaderNames();

本文发布于:2024-09-22 14:37:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/371636.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   浏览器   实体   返回   方法   内容   信息   包含
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议