文档章节

Http协议

zqwang121
 zqwang121
发布于 2016/03/30 21:17
字数 938
阅读 3
收藏 1

消息头

  HTTP请求中的常用消息头

  accept:浏览器通过这个头告诉服务器,它所支持的数据类型

  Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集

  Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式

  Accept-Language:浏览器通过这个头告诉服务器,它的语言环境

  Host:浏览器通过这个头告诉服务器,想访问哪台主机

  If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间

  Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的  防盗链

  Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接

状态行

      状态行格式: HTTP版本号 状态码 原因叙述<CRLF>

      举例:HTTP/1.1 200 OK

  状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

设置Location响应头,实现请求重定向

   public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

       response.setStatus(302);//设置服务器的响应状态码
        *设置响应头,服务器通过 Location这个头,来告诉浏览器跳到哪里,这就是所谓的请求重定向
        */
       response.setHeader("Location", "/JavaWeb_HttpProtocol_Study_20140528/1.jsp");
  }

设置Content-Encoding响应头,告诉浏览器数据的压缩格式

 public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         String data = "abcdabcdabcdabcdabcdabcdab" +
                 "cdabcdabcdabcdabcdabcdabcdabcdabc" +
                "dabcdabcdabcdabcdabcdabcdabcdabc" +
                 "dabcdabcdabcdabcdabcdabcdabcdabcdab" +
                 "cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
                 "cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
                 "cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
                 "cdabcdabcdabcdabcdabcdabcdabcdabcdabcd";
         System.out.println("原始数据的大小为:" + data.getBytes().length);
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         GZIPOutputStream gout = new GZIPOutputStream(bout); //buffer
         gout.write(data.getBytes());
         gout.close();
         //得到压缩后的数据
         byte g[] = bout.toByteArray();
         response.setHeader("Content-Encoding", "gzip");
         response.setHeader("Content-Length",g.length +"");
         response.getOutputStream().write(g);
    }

设置content-type响应头,指定回送数据类型

     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         /**
          * 浏览器能接收(Accept)的数据类型有: 
          * application/x-ms-application, 
          * image/jpeg, 
          * application/xaml+xml, 
          * image/gif, 
          * image/pjpeg, 
          * application/x-ms-xbap, 
          * application/vnd.ms-excel, 
          * application/vnd.ms-powerpoint, 
          * application/msword, 
          */
         response.setHeader("content-type", "image/jpeg");//使用content-type响应头指定发送给浏览器的数据类型为"image/jpeg"
         //读取位于项目根目录下的img文件夹里面的WP_20131005_002.jpg这张图片,返回一个输入流
         InputStream in = this.getServletContext().getResourceAsStream("/img/WP_20131005_002.jpg");
         byte buffer[] = new byte[1024];
         int len = 0;
         OutputStream out = response.getOutputStream();//得到输出流
         while ((len = in.read(buffer)) > 0) {//读取输入流(in)里面的内容存储到缓冲区(buffer)
             out.write(buffer, 0, len);//将缓冲区里面的内容输出到浏览器
         }

设置refresh响应头,让浏览器定时刷新

  public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         * 浏览器能接收(Accept)的数据类型有: 
         * application/x-ms-application, 
         * image/jpeg, 
         * application/xaml+xml, 
         * image/gif, 
         * image/pjpeg, 
         * application/x-ms-xbap, 
         * application/vnd.ms-excel, 
         * application/vnd.ms-powerpoint, 
         * application/msword, 
         */
        response.setHeader("content-type", "image/jpeg");//使用content-type响应头指定发送给浏览器的数据类型为"image/jpeg"
        //读取位于项目根目录下的img文件夹里面的WP_20131005_002.jpg这张图片,返回一个输入流
        InputStream in = this.getServletContext().getResourceAsStream("/img/WP_20131005_002.jpg");
        byte buffer[] = new byte[1024];
        int len = 0;
        OutputStream out = response.getOutputStream();//得到输出流
        while ((len = in.read(buffer)) > 0) {//读取输入流(in)里面的内容存储到缓冲区(buffer)
            out.write(buffer, 0, len);//将缓冲区里面的内容输出到浏览器
        }

设置refresh响应头,让浏览器定时刷新

public class ServletDemo04 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         * 设置refresh响应头,让浏览器每隔3秒定时刷新
         */
        // response.setHeader("refresh", "3");
        /**
         * 设置refresh响应头,让浏览器3秒后跳转到http://www.baidu.com
         */
        response.setHeader("refresh", "3;url='http://www.baidu.com'");
        response.getWriter().write("gacl");
        }
    }

设置content-disposition响应头,让浏览器下载文件

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         * 设置content-disposition响应头,让浏览器下载文件
         */
        response.setHeader("content-disposition", "attachment;filename=xxx.jpg");
        InputStream in = this.getServletContext().getResourceAsStream("/img/1.jpg");
        byte buffer[] = new byte[1024];
        int len = 0;
        OutputStream out = response.getOutputStream();
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
    }



© 著作权归作者所有

zqwang121
粉丝 6
博文 22
码字总数 15121
作品 0
杭州
程序员
私信 提问
下一代 HTTP 底层协议或将弃用 TCP 协议,改用 QUIC 协议

(给程序员的那些事加星标) 据 iThome.com.tw 报道,国际互联网工程任务组(Internet Engineering Task Force, IETF)将于近日商讨下一代 HTTP 底层协议,可能不再使用已经沿用多年的 TCP ...

程序员的那些事_
2018/11/15
0
0
选择http协议还是tcp协议

HTTP 是应用层协议,TCP 是传输层协议(位于应用层之下),放在一起类比并不合适。 不过猜测楼主是想对比 “标准 HTTP 协议” 还是 “自定义的协议(基于 TCP Socket)” 。 一般来说,移动应...

阮少爷
2017/10/27
126
0
HTTP与HTTPS的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以...

布拉君君
2017/10/30
0
0
HTTP、TCP、UDP、Socket基本概念(转)

1、TCP/IP是个协议组,可分层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有FTP、HTTP、TELNET、S...

_编程菜鸟_
2015/08/05
295
0
HTTP、TCP、UDP、Socket

先来一个讲TCP、UDP和HTTP关系的 1、TCP/IP是个协议组,可分层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应...

程序袁_绪龙
2014/12/03
312
1

没有更多内容

加载失败,请刷新页面

加载更多

Python 周刊第 418 期

新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-2020.html2020年 Python 美国开发者大会,tips: 中国也有,可以赞助国内的...

iCodeBugs
5分钟前
1
0
ThreadLocal源码阅读

首先,从set方法入手, // ThreadLocalpublic void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t);//这里可以看出,从Threa......

小海bug
13分钟前
2
0
成长之路 万事知行合一

思想决定行为,行为决定习惯,习惯决定性格,性格决定命运。 很多道理,不管是前辈给你指点说的也好,还是你自己看一些书籍学到的也好,如果不能够做到,就连那些不知道这个道理的人都不如。...

T型人才追梦者
17分钟前
2
0
uml图六种箭头的含义

在看一些技术博客的时候,经常会见到博客里画上很多uml图。因为经常会被这几种表达关系的箭头搞混,这里我就把常见的6种箭头表达的含义理一下。 泛化 概念:泛化是一种一般与特殊、一般与具体...

1只特立独行的猪
23分钟前
2
0
【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用...

NervosCommunity
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部