zoukankan      html  css  js  c++  java
  • java学习笔记—HTTP协议(10)

    客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理。

    其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信。

    如果开发者需要查看这样的数据格式,那么就需要安装一个浏览器的HTTP协议相关的插件。

    如果要深入的学习浏览器和服务器通信的数据,那么需要详细的掌握他们之间发送的数据内容。

    1  请求信息

    GET / HTTP/1.1                             请求行
    Accept: */*
    Accept-Language: zh-cn,en-US;q=0.5             请求头
    User-Agent: Mozilla/4.0
    Accept-Encoding: gzip, deflate
    Host: www.sina.com.cn
    Connection: Keep-Alive
                                             空白行
    uname=jack&upsw=jnb                         请求体    提交的POST数据

    2. 请求行

    请求方式  GET和POST

    请求资源  一般是以/开头就是需要访问的网站名和页面的名

    协议信息  协议名/版本

    2. 请求头

    请求头是浏览器发送给服务器,那么就是浏览器想通知服务器做一些事情。

    MIME类型指定是的什么样的文件格式需要使用什么样的应用打开。

    Accept: text/html,image/*                 通知服务器浏览器接收的数据类型MIME
    Accept-Charset: ISO-8859-1                 通知服务器提交数据的编码方式
    Accept-Encoding: gzip,compress             通知服务器浏览器支持数据的压缩
    Accept-Language: en-us,zh-cn              通知服务器浏览器当前的语言信息
    Host: www.it315.org:80                     通知服务器要请求的主机名
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51      通知服务器资源的最新修改时间
    Referer: http://www.it315.org/index.jsp         通知服务器本次请求来自于哪一个URL
    User-Agent: Mozilla/4.0                  通知服务器客户端使用的浏览器内核
    Cookie                                 通知服务器请求中带有Cookie数据
    Connection: close/Keep-Alive                通知服务器可以保持建立好的连接
    Date: Tue, 11 Jul 2000 18:23:51 GMT         通知服务器发送请求的时间

    请求是由浏览器发送的。那么我们程序员一般是修改不了这些请求头数据。但是在特定的情况下需要修改请求的头信息,那么此时就需要使用到JavaSE的网络编程知识的一些基础。

    URL   主要使用该类来描述浏览器地址栏中的地址信息。

    HttpURLConnection  主要描述的是客户端和服务器建立的连接对象

    setRequestProperty()  可以设置请求头信息

    3. 请求体

      主要包含的是POST提交的数据。

    4.多学一招: HTTP1.0和1.1的区别是什么。

    HTTP1.0   该协议在发送请求的时候没有Host字段,浏览器为每一次请求建立独立的连接。

    思考:如果需要浏览的页面中有3个图片。那么请问发送了几次请求?

    4 = 1次文本+3次图片

    HTTP1.1   提供了一个必须的Host字段,而且建立好一次连接之后可以重复使用。提高用户的上网体验。

    5  响应信息

    HTTP/1.1 200 OK                                  响应行
    Server: Apache-Coyote/1.1
    Set-Cookie: JSESSIONID=A8FB52…; Path=/day04      响应头
    Content-Type: text/html;charset=ISO-8859-1
    Content-Length: 620
    Date: Fri, 11 Jan 2013 07:42:39 GMT
                                                  空白行
    This is my JSP page.                               响应体

    1. 响应行

    协议和版本

    响应状态码  200 处理成功  302和304需要细化请求  404资源不存在 500服务器失败

    状态码说明信息  OK

    2. 响应头

    Location: http://www.it315.org/index.jsp          通知浏览器需要进一步细化请求的路劲
    Server:apache tomcat                         通知浏览器服务器的名
    Content-Encoding: gzip                      通知浏览器响应数据类型是压缩格式
    Content-Length: 80                          通知浏览器数据的长度
    Content-Language: zh-cn                      通知浏览器语言
    Content-Type: text/html; charset=GB2312          通知浏览器内容类型
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT     通知浏览器资源最后一次修改的时间
    Refresh: 1;url=http://www.it315.org             通知浏览器自动定时刷新
    Content-Disposition: attachment; filename=a.zip     通知浏览器数据的处理方式
    Transfer-Encoding: chunked                   通知浏览器数据是否切块
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search         通知浏览器需要使用Cookie存储数据
    Expires: -1                                 通知浏览器不要缓存页面
    Cache-Control: no-cache      
    Pragma: no-cache   
    Connection: close/Keep-Alive                    通知浏览器服务器已经保持了连接
    Date: Tue, 11 Jul 2000 18:23:51 GMT             通知浏览器服务器处理的时间

    3. 响应体

      服务器发送给浏览器需要的资源数据

    案例一: 使用动态网页开发技术实现图片的下载

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            // 通知浏览器以下载的方式打开美女
            response.setHeader("content-disposition", 
    "attachment;filename=mv.jpg");
            // 获取图片资源
            InputStream in = this.getServletContext().getResourceAsStream("/0001.jpg");
            // 获取输出到页面的输出流对象
            OutputStream out = response.getOutputStream();
            byte [] bs = new byte[1024];
            int len = 0;
            while((len = in.read(bs)) != -1){
                out.write(bs, 0, len);
            }
            // 释放资源
            in.close();
            out.close();
            
        }

    总结:HTTP协议本身在传递数据的时候,数据时明码传输的。如果用户需要传输一些隐私的数据,那么需要进行加密。

    方式1:使用各种语言支持的加密方式。

    方式2:建立客户端和服务器端加密的通信连接。

    HTTPS协议

    加密的HTTP协议,客户端浏览器和服务器之间会建立一个加密的通道,在该通道下传递的数据都是安全的。

    如:在线交易、网上银行。

    那么我们就需要在Tomcat中实现HTTPS的搭建。

    1. 生成证书

    keytool -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore

    2. 在tomcat中引入证书

       配置server.xml文件如下

       <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

    SSLEnabled="true"

                   maxThreads="150" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS"

                                   keystoreFile="d: omcat.keystore"

                                   keystorePass="123456"

                                   />

    3. 使用浏览器建立安全的连接https://localhost:8443

    问题:

    1. tomcat启动的时候一闪而过。

    没有配置java_home环境变量。java_home=D:jdk6.0

    1. 如果启动直接报错。

    如果启动的时候发现错误信息后直接关闭了窗口,那么请查看日志信息文件。如果发现时地址冲突了,那么修改server.xml文件中的8080端口即可。

  • 相关阅读:
    远程云服务器开启sql 远程连接
    代码性能优化第一篇
    sql server 字符串按最后数字排序
    Ocelot 自定义权限中间件,自定义中间件添加
    abp vnext 快速搭建项目框架
    Sqlplus报错ORA-12547
    OGG参数PURGEOLDEXTRACTS
    OGG低版本Trail文件6位,如何达到序列阈值999999后如何处理?
    OGG-Oracle 11.2.0.1 ->19.3 pdb 使用Ogg 同步版本相关问题学习整理
    OGG-00423 Could not find definition
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4355740.html
Copyright © 2011-2022 走看看