HTTP协议

这两天在看韩顺平老师2011年的servlet/jsp视频教程,年代有点久远,但老师说的很好,现在我来做下笔记。

http协议的介绍

①    http协议建立在tcp/ip协议基础上

②    http协议全称 超文本传输协议

③    http协议有1.0 和 1.1版本 ,目前通用的是1.1版本

http1.0 称为短连接,发送完数据就断开连接

http1.1 称为长连接,发送完数据后仍保持一段时间,默认为30s

http的请求部分

基本结构:

[请求行]  请求方式  请求的资源  使用的http协议
[消息头]  消息名:内容
[空行]
[实体内容] 内容名字=内容体

特别说明: 并不是每一次请求的消息头都一样.

请求行
GET /test/hello.html HTTP/1.1
消息头
Accept  text/html,image/* 【告诉服务器,浏览器可以接收文本,网页,图片 】 
Accept-Charset  ISO-8859-1 【告诉服务器,浏览器的字符编码为ISO-8859-1】
Accept-Encoding  gzip, deflate 【告诉服务器,浏览器可接收gzip等打包后的数据】
Accept-Language  zh-cn 【告诉服务器,浏览器支持中文】
Host  http://www.sohu.com:80 【 告诉服务器,浏览器要找的主机】
If-Wodified-Since Tue, 11 Jul 200018:23:51 GMT 【告诉服务器,浏览器的缓存中有资源文件及该文件最后更新时间】
Referer  http://localhost:8080/test/abc.html 【告诉服务器,浏览器从何处进入这个网站,用来防盗链】
User-Agent  Mozilla/4.0 【告诉服务器,浏览器内核】
Cookie
Connection  Keep-Alive 【告诉服务器,保持连接,发送完数据不关闭连接】
Date Tue, 11 Jul 200018:23:51 GMT 【浏览器发送该http请求的时间】
空行
实体内容

在servlet中获取消息头的方式:String host=request.getHeader("Host");

请求方式

请求行中的GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT

常用的有:POST,GET

 
get 提交 和 post的提交的区别

①安全性get<post 因为get会把提交的信息显示到地址栏

②提交内容大小get<post get一般不要大于2k, post理论上无限制,但是在实际开发中,建议不要大于64k

③请求响应速度get>post get要求服务器立即处理请求,而post请求可能形成一个队列请求

④Get可以保留uri中的参数,利于收藏


关于Referer的实际案例:

//获取用户浏览器Referer

       String referer=request.getHeader("Referer");

       if(referer==null||!referer.startsWith("http://localhost:8088/servletPro")){

           response.sendRedirect("/servletPro/Error");

           return;

       }

http的响应部分

基本结构:

状态行:

格式:HTTP版本号 状态码 原因叙述

举例:HTTP/1.1 200 OK

 

状态码                      含义

100-199         表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200-299         表示成功接收请求并完成整个处理过程,常用200

300-399        为完成请求,客户需要进行一步细化请求。例如:请求的资源移动到一个新的地址,常用302,307

400-499         客户端的请求有错误404

500-599         服务器端出现错误,常用500 

http响应的状态行举例说明

200 就是整个请求和响应过程没有发生错误,这个最常见.

302表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: response.sendRedirect(“/web应用/资源名”) 

案例:

response.setStatus(302);

response.setHeader("Location", "/servletPro/Servlet2");

上面两句话等价  response.sendRedirect("/servletPro/Servlet2");

404: 找不到资源

500: 服务器端错误

 http响应消息头详解
Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到url】

Server:apache tomcat 【告诉浏览器我是tomcat】

Content-Encoding: gzip 【告诉浏览器我使用 gzip】

Content-Length: 80  【告诉浏览器会送的数据大小80节】

Content-Language: zh-cn 【支持中文】

Content-Type: text/html; charset=GB2312 【内容格式text/html; 编码gab2312】

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】

Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】

Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】

Transfer-Encoding: chunked  【传输的编码】

Set-Cookie:SS=Q0=5Lb_nQ;path=/search【后面详讲】

Expires: -1【告诉浏览器如何缓存页面IE】

Cache-Control: no-cache  【告诉浏览器如何缓存页面火狐】

Pragma: no-cache   【告诉浏览器如何缓存页面】

Connection: close/Keep-Alive  【保持连接 1.1是Keep-Alive】

Date: Tue, 11 Jul 200018:23:51 GMT

①定时刷新Refresh使用

 response.setHeader("Refresh","5;url=/servletPro/Servlet2");

 

②文件下载Content-Disposition

publicvoid doGet(HttpServletRequest request, HttpServletResponseresponse)

           throwsServletException, IOException {
       response.setContentType("text/html");
       //PrintWriterout = response.getWriter();
       //演示下载文件
       response.setHeader("Content-Disposition", "attachment; filename=winter.jpg");
       //打开文件.说明一下web 站点下载文件的原理
       //1.获取到要下载文件的全路径
       String path=this.getServletContext().getRealPath("/images/Winter.jpg");
       //System.out.println("path="+path);
       //2创建文件输入流
       FileInputStream fis=new FileInputStream(path);
       //做一个缓冲字节数组
       byte buff[]=newbyte[1024];
       int len=0;//表示实际每次读取了多个个字节
       OutputStreamos=response.getOutputStream();
       while((len=fis.read(buff))>0){          
           os.write(buff, 0, len);
       }
     os.close();
     fis.close();
}

缺点: 没有进度条./图标

③缓存讲解

提出问题:浏览器默认情况下,会缓存我们的页面,这样出现一个问题:如果我们的用户习惯把光标停留在地址栏,然后回车来取页面,就会默认调用cache中取数据。

(1)   有些网站要求及时性很高,因此要求我们不缓存页面

代码:

//指定该页面不缓存 Ie

       response.setDateHeader("Expires", -1);【针对IE浏览器设置不缓存】

       //为了保证兼容性.

       response.setHeader("Cache-Control", "no-cache");【针对火狐浏览器等】

       response.setHeader("Pragma", "no-cache");【其他浏览器】

(2)   有些网站要求网页缓存一定时间,比如缓存一个小时

response.setDateHeader("Expires",System.currentTimeMillis()+3600*1000*24);后面一个参数表示设置的缓存保持时间,-1表示永远缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值