Http协议

作者: 奋斗的老王 | 来源:发表于2017-02-20 13:49 被阅读123次

    什么是HTTP协议 ?

    • 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式
    • 使用telnet程序连上web服务器,并使用HTTP协议获取某个页面,以快速了解 HTTP协议的作用( Windows_cmd )
    • 利用一些浏览器的插件可以查看Http协议的详细内容( 如IE的HttpWatch,火狐的firebug,Ghrome自带工具 )

    HTTP协议简介

    • HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
    • HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
    • HTTP协议就是: 浏览器与服务器之间的数据传输格式规范

    查看Http协议的工具

    1. 火狐的firebug : 右键firbug -> 网络
    2. Ghrome自带工具 : 右键审查元素 -> network
    3. telnet工具 :
    • 开启telnet程序: 控制面板 -> 程序和功能 -> 打开或关闭windows功能 -> 勾上开启telnet客户端 ->确定
    • telnet如何使用: telnet 主机地址 端口 -> telnet localhost 8080 (就可以看见响应信息)
      • control + ] + 回车(可以看到回显)

    HTTP请求

    • 请求行 : GET /day09/hello HTTP/1.1
      • 请求方式 : POSTGETHEADOPTIONSDELETETRACEPUT
      • 请求路径( 请求的资源名称 ) : 即URI
        • URL(统一资源定位符) : 仅可以定位互联网资源
        • URI(统一资源标记符) : 可以标记任何资源, 可以是本地资源文件, 局域网资源, 互联网资源(URI>URL)
      • HTTP协议版本 : HTTP/1.0、HTTP/1.1
      • HTTP1.0 与 1.1区别 :
        1. HTTP1.0协议中, 客户端与web服务器建立连接后, 只能获得一个web资源
        2. HTTP1.1协议中, 允许客户端与web服务器建立连接后, 在一个连接上获取多个web资源
    • 请求头 :
      • Accept: text/html,image/* -- 浏览器接受的数据类型
      • Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式
      • Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式
      • Accept-Language: en-us,zh- --浏览器接受的语言
      • Host: www.xxx.org:80 --(必须的)当前请求访问的目标地址(主机:端口)
      • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间
      • Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里
      • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型
      • Cookie:name=eric -- 浏览器保存的cookie信息
      • Connection: close/Keep-Alive -- 浏览器跟服务器连接状态: close: 连接关闭; keep-alive:保存连接
      • Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间- 实体内容 :
    • Java当中与HTTP请求有关的类 : HttpServletRequest对象(核心的API)
      • 请求行:
        1. request.getMethod(); 请求方式
        2. request.getRequetURI() / request.getRequetURL() 请求资源
        3. request.getProtocol() 请求http协议版本
      • 请求头:
        1. request.getHeader("名称") 根据请求头获取请求值
        2. request.getHeaderNames() 获取所有的请求头名称
      • 实体内容:request.getInputStream() 获取实体内容数据

    请求参数的获取与编发问题

    • 传递的请求参数如何获取
      • GET方式 : 参数放在URI后面
      • POST方式 : 参数放在实体内容中
    • 获取GET方式参数 : request.getQueryString();
    • 获取POST方式参数 : request.getInputStream();
    • 问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析。所以可以使用统一方便的获取参数的方式:
      • 核心的API:
        • request.getParameter("参数名"); : 根据参数名获取参数值(注意,只能获取一个值的参数)
        • request.getParameterValue("参数名“); : 根据参数名获取参数值(可以获取多个值的参数)
        • request.getParameterNames(); : 获取所有参数名称列表
            String name = req.getParameter("name");
            String pwd = req.getParameter("password");
            System.out.println(name + ":" + pwd);
            Enumeration<String> enums = req.getParameterNames();
            while(enums.hasMoreElements()){
                String paramName = enums.nextElement();
                String paramValue = req.getParameter(paramName);
                System.out.println(paramName + ":" + paramValue);
            }
    

    请求参数编码问题

    • 修改POST方式参数编码:request.setCharacterEncoding("utf-8");
    • 修改GET方式参数编码:手动解码:String name = new String(name.getBytes("iso-8859-1"),"utf-8");

    HTTP响应

    • 响应行
      • 状态码 : 服务器处理请求的结果(状态)
        • 常见的状态:
          • 200 : 表示请求处理完成并完美返回
          • 302 : 表示请求需要进一步细化
          • 404 : 表示客户访问的资源找不到
          • 500 : 表示服务器的资源发送错误(服务器内部错误)
      • 协议版本 :
      • 状态描述 :
    • 响应头
      • Location - 表示重定向的地址,该头和302的状态码一起使用。
      • Server - 表示服务器的类型
      • Content-Encoding - 表示服务器发送给浏览器的数据压缩类型
      • Content-Length - 表示服务器发送给浏览器的数据长度
      • Content-Language - 表示服务器支持的语言
      • Content-Type - 表示服务器发送给浏览器的数据类型及内容编码
      • Last-Modified - 表示服务器资源的最后修改时间
      • Refresh: 1;url=http://www.baidu.com --表示定时刷新
      • Content-Disposition - 表示告诉浏览器以下载方式打开资源(下载文件时用到)
      • 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 : 表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
    • Java当中与响应有关的类 : HttpServletResponse对象(核心的API)
      • HttpServletResponse对象修改响应信息:
        • 响应行 : response.setStatus() 设置状态码
        • 响应头 : response.setHeader("name","value") 设置响应头
        • 实体内容 :
          • response.getWriter().writer(); : 发送字符实体内容
          • response.getOutputStream().writer(); : 发送字节实体内容

    请求重定向 (Location)

    定时刷新 (refresh)

    content-Type作用

    总结

    • http协议: 浏览器和服务器之间数据传输的格式规范

      1. http请求:
      • 格式:
        请求行
        请求头
        空行
        实体内容(POST提交的数据在实体内容中)
      • 重点 : 使用HttpServletRequest对象 : 获取请求数据
      1. http响应;
      • 格式:
        响应行
        响应头
        空行
        实体内容(浏览器看到的内容)
      • 重点 : 使用HttpServletResponse对象 : 设置响应数据

    相关文章

      网友评论

        本文标题:Http协议

        本文链接:https://www.haomeiwen.com/subject/qimlwttx.html