HTTP协议

1:什么是HTTP协议

HTTP是hypertext transfer protocal(超文本传输协议)的简写,是定义在TCP/IP应用层的一种协议。Web客户端向web服务端发送请求并获取响应,在这个过程中就是采用HTTP协议的方式进行数据的传递。HTTP协议的主要特点可以概括如下:

  • 支持客服/服务器模式
  • 简单快速:客服端向服务端发送请求的时候,只需要传送请求方式+请求路径。由于HTTP请求协议简单,所以HTTP服务器程序规模小,通信速度快。
  • 灵活:HTTP允许传送任意类型的数据对象,通过”Content-Type”属性标识当前传送的数据对象类型。
  • 面向无连接:无连接的含义就是限制每次连接只处理一个请求。服务器处理请求,当收到客户端的应答后就会断开连接。采用这种方式可以节省时间。
  • 无状态:无状态是指协议对事物的处理没有记忆的能力。对应HTTP发送的请求,如果后期需要重新发送相同的请求,则它必须重传。虽然这样比较消耗时间,但却提高了服务器应答的速度。

2:HTTP请求

2.1:HTTP请求包括的内容
客服端连接服务器,向服务器请求某个web资源,这个过程就是客服端向服务器发送了一个HTTP请求。一个HTTP请求主要包括:请求行、多个请求头信息以及实体内容。
这里写图片描述
2.2:HTTP请求细节-请求方式
HTTP常用的请求方式有get与post。浏览器默认的请求方式为get请求,例如直接在浏览器上通过url访问或者通过超链接跳转,这些都是get请求,可以通过修改表单的提交方式为post。
get请求:在url后面通过”?”方式拼接传递数据项,如果数据项存在多个,通过”&”的方式进行拼接(localhost:8080/ServletDemo?name=’lx’&psw=’123456’)。这种方式会使传递的参数直接显示在浏览器上,同时传递参数参数的大小不能超过1k。
post请求:在请求的实体内容中发送请求参数,请求参数不会出现在浏览器上,同时对于参数传递的大小没有限制,相比get请求是一种比较安全的请求方式。

2.3、HTTP请求的细节——消息头
accept:浏览器通过这个头告诉服务器,它所支持的数据类型
  Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
  Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
  Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
  Host:浏览器通过这个头告诉服务器,想访问哪台主机
  If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
  Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
  Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接

3:HTTP响应

3.1:HTTP响应包括的内容
响应代表服务器向客服端发送的数据主要包括:响应状态、若干消息头、以及响应内容
这里写图片描述
3.2:HTTP响应的细节——状态行
状态行格式: HTTP版本号 状态码 原因叙述 举例:HTTP/1.1 200 OK
 状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
  这里写图片描述
 3.3:HTTP响应细节——常用响应头
HTTP响应中的常用响应头(消息头)
Location: 服务器通过这个头,来告诉浏览器跳到哪里
  Server:服务器通过这个头,告诉浏览器服务器的型号
  Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
  Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
  Content-Language: 服务器通过这个头,告诉浏览器语言环境
  Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
  Refresh:服务器通过这个头,告诉浏览器定时刷新
  Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式处理数据
  Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
  Expires: -1 控制浏览器不要缓存
  Cache-Control: no-cache
  Pragma: no-cache

4:在服务器端设置响应头来控制浏览器的行为

4.1:设置location响应头,实现重定向的功能

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //设置状态码
        response.setStatus(302);
        //设置响应头
        response.setHeader("Location", "/resources/images/18686.jpg");

    }

这里写图片描述
浏览器通过解析响应信息,发现status Code为302,表示当前请求信息已经跳转到一个新的地址,而这个新地址就是location后面对应的URL。

4.2:设置响应头”content-type”的属性,指定浏览浏览器接收的数据类型

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /**
         * 浏览器能接收的数据类型有:
         * 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/jpg"); //使用content-type响应头指定发送给浏览器的数据类型为image/jpg
        InputStream in = this.getServletContext().getResourceAsStream("/resources/images/18686.jpg");
        byte[] buff=new byte[1024];
        OutputStream out = response.getOutputStream(); //得到输出流
        int len=0;
        while((len=in.read(buff))>0){ //读取输入流里面的内容存放在缓冲区
            out.write(buff, 0, len); //降缓存区的内容输出到浏览器
        }
    }

发送请求后浏览器的响应信息:
这里写图片描述
4.3:设置refresh响应头让浏览器定时刷新

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //设置refresh响应头,让浏览器10s调整到www.baidu.com
        response.setHeader("refresh", "10;url='http://www.baidu.com'");
        response.getWriter().write("liaoxue");
    }

对应浏览器的响应信息:
这里写图片描述
4.4:设置content-dispositon响应头,让浏览器下载文件

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /**
         * 设置content-disposition响应头,让浏览器下载文件
         */
        response.setHeader("content-disposition", "attachment;filename=bg.jpg");
        InputStream in = this.getServletContext().getResourceAsStream("/resources/images/18686.jpg");
        byte[] buff=new byte[1024];
        OutputStream out = response.getOutputStream(); //得到输出流
        int len=0;
        while((len=in.read(buff))>0){ //读取输入流里面的内容存放在缓冲区
            out.write(buff, 0, len); //降缓存区的内容输出到浏览器
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值