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

上传人:sccc 文档编号:5360002 上传时间:2023-06-29 格式:PPT 页数:19 大小:148.51KB
返回 下载 相关 举报
客户请求的处理HTTP请求报头.ppt_第1页
第1页 / 共19页
客户请求的处理HTTP请求报头.ppt_第2页
第2页 / 共19页
客户请求的处理HTTP请求报头.ppt_第3页
第3页 / 共19页
客户请求的处理HTTP请求报头.ppt_第4页
第4页 / 共19页
客户请求的处理HTTP请求报头.ppt_第5页
第5页 / 共19页
点击查看更多>>
资源描述

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

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

2、理解HTTP无疑会有助于更有效地使用servlet和JSP,请求报头的读取(HttpServletRequest中的方法),通用方法getHeader(报头名对大小写不敏感)getHeadersgetHeaderNames专用方法getCookiesgetAuthType和getRemoteUsergetContentLengthgetContentTypegetDateHeadergetIntHeader获取相关信息的方法getMethod,getRequestURI,getQueryString,getProtocol,缺失报头的检查,HTTP 1.0所有请求报头都是可选的HTTP 1.1

3、仅Host是必需的结论在试图使用由request.getHeader返回的值之前一定要检查它是否为null。String val=request.getHeader(Some-Name);if(val!=null),制作所有请求报头的表格,public class ShowRequestHeaders extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException out.println(docTyp

4、e+n+title+n+n+title+n+Request Method:+request.getMethod()+n+Request URI:+request.getRequestURI()+n+Request Protocol:+request.getProtocol()+n+,制作所有请求报头的表格(续),n+n+Header NameHeader Value);Enumeration headerNames=request.getHeaderNames();while(headerNames.hasMoreElements()String headerName=(String)head

5、erNames.nextElement();out.println(+headerName);out.println(+request.getHeader(headerName);out.println(n);public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException doGet(request,response);,常见HTTP 1.1请求报头,Accept标示浏览器能够处理的MIME类型可以向不同的客户程序发送不同的内容。例如,P

6、NG文件拥有较好的压缩特性但并不被浏览器广泛支持。servlet可以检查浏览器是否支持PNG文件,如果支持则发送否则发送。警告:在点击Refresh按钮时,IE会错误在设置这个报头。但在最初的请求中,对这个报头的设置是正确的Accept-Encoding标示浏览器能够处理的编码(如gzip或compress)参见随后的例子,常见HTTP 1.1请求报头(续),Authorization用于发送受密码保护的页面的用户身份验证信息。应该尽可能使用HTML表单来发送用户名/密码,在会话对象中存储信息;而不是这个报头。因为这种方式会弹出一个小而简练的对话框,许多用户不熟悉它。服务器拥有其他高级的方式来

7、设置受密码保护的页面,无须显式地在servlet中编写相关的代码。,常见HTTP 1.1请求报头(续),Connection在HTTP 1.0中,keep-alive表示浏览器能够处理持续性连接。在HTTP 1.1中,持续性连接是默认的。持续性连接表示:对于来自同一客户的相隔时间很近的请求(如与同一页面相关联的图像,或具有框架的页面中的不同单元),服务器可以重用已有的socket。servlet并不能单方面地完成这项工作;要使持续性连接的使用成为可能,它们能够做的就是给予服务器足够的信息。因此,它们应该用setContentLength设置Content-Length(输出的长度使用ByteA

8、rrayOutputStream来确定)。Cookie给出之前发送到客户端的cookie。使用getCookies,不要使用getHeader。参见后面的课程。,常见HTTP 1.1请求报头(续),Host标示最初的URL中给出的主机。在HTTP 1.1中这是一个必需的报头。如果您在编写定制的HTTP客户程序,或者使用HTTP/1.1版本telnet到服务器,那么了解这一点十分重要。If-Modified-Since标示仅当在指定的日期之后被改动过时客户才希望获得该页面不要直接处理这种情况,而应实现getLastModified。,常见HTTP 1.1请求报头(续),Referer引用页面的U

9、RL对于流量跟踪有作;许多服务器都记录这项信息也可用来让用户设置相应的参数,然后再返回到跳转过来的页面很容易被哄骗;所以不要将它作为确定付费网站显示了多少次您的标题广告的唯一途径。某些浏览器(Opera),广告过滤器(Web Washer),和个人防火墙(Norton)会屏蔽这个报头User-Agent最好用来鉴定客户的类型浏览器、I-mode的移动电话等。对于Web应用,请尽可能使用其他报头。同样,也很容易被哄骗。参见后面的例子,发送经过压缩的Web页面:GzipUtilities.java,public class GzipUtilitiespublic static boolean is

10、GzipSupported(HttpServletRequest request)String encodings=request.getHeader(Accept-Encoding);return(encodings!=null),发送经过压缩的Web页面:LongServlet.java,public class LongServlet extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptio

11、n response.setContentType(text/html);/Change the definition of out depending on/whether 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

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

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

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

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号