客户请求的处理HTTP请求报头.ppt

上传人:本田雅阁 文档编号:2147870 上传时间:2019-02-22 格式:PPT 页数:19 大小:148.51KB
返回 下载 相关 举报
客户请求的处理HTTP请求报头.ppt_第1页
第1页 / 共19页
客户请求的处理HTTP请求报头.ppt_第2页
第2页 / 共19页
客户请求的处理HTTP请求报头.ppt_第3页
第3页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《客户请求的处理HTTP请求报头.ppt》由会员分享,可在线阅读,更多相关《客户请求的处理HTTP请求报头.ppt(19页珍藏版)》请在三一文库上搜索。

1、客户请求的处理:HTTP请求报头,主讲:刘晓涛,议程,HTTP请求报头的读取 制作所有请求报头的表格 了解各种请求报头 通过压缩页面减少下载时间 区分不同的浏览器类型,一个典型的HTTP请求,GET /servlet/Search?keywords=servlets+jsp HTTP/1.1 Accept: image/gif, image/jpg, */* Accept-Encoding: gzip Connection: Keep-Alive Cookie: userID=id456578 Host: Referer: http:/ User-Agent: Mozilla/4.0 (co

2、mpatible; MSIE 6.0; Windows NT 5.0) 理解HTTP无疑会有助于更有效地使用servlet和JSP,请求报头的读取 (HttpServletRequest中的方法),通用方法 getHeader (报头名对大小写不敏感) getHeaders getHeaderNames 专用方法 getCookies getAuthType和getRemoteUser getContentLength getContentType getDateHeader getIntHeader 获取相关信息的方法 getMethod, getRequestURI , getQueryS

3、tring, getProtocol,缺失报头的检查,HTTP 1.0 所有请求报头都是可选的 HTTP 1.1 仅Host是必需的 结论 在试图使用由request.getHeader返回的值之前一定要检查它是否为null。 String val = request.getHeader(“Some-Name“); if (val != null) ,制作所有请求报头的表格,public class ShowRequestHeaders extends HttpServlet public void doGet(HttpServletRequest request, HttpServletRe

4、sponse response) throws ServletException, IOException out.println(docType + “n“ + “+title+“n“+ “n“ + “ + title + “n“ + “Request Method: “ + request.getMethod() + “n“ + “Request URI: “ + request.getRequestURI() + “n“ + “Request Protocol: “ + request.getProtocol() + “n“ +,制作所有请求报头的表格(续),“n“ + “n“ + “H

5、eader NameHeader Value“); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements() String headerName = (String)headerNames.nextElement(); out.println(“ + headerName); out.println(“ “+request.getHeader(headerName); out.println(“n“); public void doPost(HttpServletRequest

6、 request, HttpServletResponse response) throws ServletException, IOException doGet(request, response);,常见HTTP 1.1请求报头,Accept 标示浏览器能够处理的MIME类型 可以向不同的客户程序发送不同的内容。例如,PNG文件拥有较好的压缩特性但并不被浏览器广泛支持。servlet可以检查浏览器是否支持PNG文件,如果支持则发送否则发送。 警告:在点击Refresh按钮时,IE会错误在设置这个报头。但在最初的请求中,对这个报头的设置是正确的 Accept-Encoding 标示浏览器能

7、够处理的编码(如gzip或compress) 参见随后的例子,常见HTTP 1.1请求报头(续),Authorization 用于发送受密码保护的页面的用户身份验证信息。 应该尽可能使用HTML表单来发送用户名/密码,在会话对象中存储信息;而不是这个报头。因为这种方式会弹出一个小而简练的对话框,许多用户不熟悉它。 服务器拥有其他高级的方式来设置受密码保护的页面,无须显式地在servlet中编写相关的代码。,常见HTTP 1.1请求报头(续),Connection 在HTTP 1.0中,keep-alive表示浏览器能够处理持续性连接。在HTTP 1.1中,持续性连接是默认的。持续性连接表示:对

8、于来自同一客户的相隔时间很近的请求(如与同一页面相关联的图像,或具有框架的页面中的不同单元),服务器可以重用已有的socket。 servlet并不能单方面地完成这项工作;要使持续性连接的使用成为可能,它们能够做的就是给予服务器足够的信息。因此,它们应该用setContentLength设置Content-Length(输出的长度使用ByteArrayOutputStream来确定)。 Cookie 给出之前发送到客户端的cookie。使用getCookies,不要使用getHeader。参见后面的课程。,常见HTTP 1.1请求报头(续),Host 标示最初的URL中给出的主机。 在HTTP

9、 1.1中这是一个必需的报头。如果您在编写定制的HTTP客户程序,或者使用HTTP/1.1版本telnet到服务器,那么了解这一点十分重要。 If-Modified-Since 标示仅当在指定的日期之后被改动过时客户才希望获得该页面 不要直接处理这种情况,而应实现getLastModified。,常见HTTP 1.1请求报头(续),Referer 引用页面的URL 对于流量跟踪有作;许多服务器都记录这项信息 也可用来让用户设置相应的参数,然后再返回到跳转过来的页面 很容易被哄骗;所以不要将它作为确定付费网站显示了多少次您的标题广告的唯一途径。 某些浏览器(Opera),广告过滤器(Web Wa

10、sher),和个人防火墙(Norton)会屏蔽这个报头 User-Agent 最好用来鉴定客户的类型 浏览器、I-mode的移动电话等。 对于Web应用,请尽可能使用其他报头。 同样,也很容易被哄骗。 参见后面的例子,发送经过压缩的Web页面:GzipUtilities.java,public class GzipUtilities public static boolean isGzipSupported(HttpServletRequest request) String encodings = request.getHeader(“Accept-Encoding“); return(en

11、codings != null) ,发送经过压缩的Web页面:LongServlet.java,public class LongServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(“text/html“); / Change the definition of “out“ depending on / whether

12、or not gzip is supported. PrintWriter out; if (GzipUtilities.isGzipSupported(request) ,发送经过压缩的Web页面:LongServlet.java (续), out.println (docType + “n“ + “ + title + “n“ + “n“ + “ + title + “n“); String line = “Blah, blah, blah, blah, blah. “ + “Yadda, yadda, yadda, yadda.“; for(int i=0; i“); out.close

13、(); ,发送经过压缩的页面:结果,未经压缩(28.8K modem), Netscape和Internet Explorer: 50 seconds 经过压缩(28.8K modem), Netscape和Internet Explorer: 5 seconds 注意:在处理这些基准数据时要小心,区分不同的浏览器类型,仅在必需时才使用User-Agent 否则,我们最终的代码不得不维护浏览器各个版本及其功能的表格,导致代码难以维护。 检查null HTTP 1.1规范并不要求这个报头,某些浏览器允许用户禁止这个报头(如Opera),一些定制客户程序甚至有可能根本就不使用这个报头。 如果要区分

14、Netscape和Internet Explorer,请检查“MSIE”,而非“Mozilla” 在这个报头的开始,Netscape和Internet Explorer都设置“Mozilla”。 这是为了JavaScript的兼容性。 要注意,这个报头可以伪造。 如果某个客户伪造这个报头,服务器根本无从察觉。,区分不同的浏览器类型(代码),public class BrowserInsult extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws

15、 ServletException, IOException response.setContentType(“text/html“); PrintWriter out = response.getWriter(); String title, message; String userAgent = request.getHeader(“User-Agent“); if (userAgent != null) ,小结,servlet的许多任务只能利用来自于浏览器的HTTP报头来完成。 访问任意报头使用request.getHeader() 要记住检查是否为null cookie,授权信息,内容长度以及内容类型都拥有快捷的方法。 直接读取的最重要报头 Accept Accept-Encoding Connection Referer User-Agent,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1