Dev_Nick

导航

http协议

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

版本有:

HTTP/1.0:客户端与web服务器建立连接后,只能获得一个web资源。

HTTP/2.0:允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

参看http协议格式的工具:

1)使用火狐浏览器的firebug插件。

2)使用谷歌浏览器的“审查元素”功能。

3)使用windows系统自带的telnet工具(远程访问工具)。

http协议分为两个部分:

1)http请求(浏览器->服务器)

2)http响应(服务器->浏览器)

http请求

每个http请求有请求行、请求头、和实体内容三部分组成。

格式如下:

GET /day09/hello HTTP/1.1               -请求行
Host: localhost:8080                    --请求头(多个key-value对象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
                                    --一个空行
name=eric&password=123456             --(可选)实体内容

1)请求行

格式: 请求方式 统一资源标识符 协议版本

常见的术语:

  请求资源:

    URL:  统一资源定位符。http://localhost:8080/day09/testImg.html。只能定位互联网资源。是URI的子集。

    URI: 统一资源标记符。/day09/hello。用于标记任何资源。可以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html),互联网。

  请求方式:

    常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE  

    常用的请求方式: GET  和 POST

    GET和POST请求方式的对比:

      GET:

        1)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。

        2)GET提交参数数据有限制,不超过1KB。

        3)GET方式不适合提交敏感密码。

      POST:

        1)参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。

        2)POST提交的参数数据没有限制。

        3)POST方式提交敏感数据。

    注意: 浏览器直接访问的请求,默认提交方式是GET方式

2)请求头

3)实体内容

  只有post请求提交的参数会放到实体内容中。

HttpServletRequest对象

作用:用于获取请求数据。

核心API:

  请求行:

    request.getMethod();   请求方式

           request.getRequetURI()   / request.getRequetURL()   请求资源

           request.getProtocol()   请求http协议版本

  请求头:

    request.getHeader("名称")   根据请求头获取请求值

           request.getHeaderNames()    获取所有的请求头名称

  请求参数获取(post请求中的实体的实体内容):

      GET:request.getQueryString();

      POST: request.getInputStream();

    由于以上获取参数的方式不通用,获取到参数之后需要进一步进行解析很麻烦,下面看一下比较通用的获取请求参数的API:

      request.getParameter("参数名");  根据参数名获取参数值(注意,只能获取一个值的参数)

             request.getParameterValue("参数名“);根据参数名获取参数值(可以获取多个值的参数)

      request.getParameterNames();   获取所有参数名称列表

  请求的解码格式:

    修改POST方式参数编码:

                 request.setCharacterEncoding("utf-8");

            修改GET方式参数编码:

                 手动解码:String name = new String(name.getBytes("iso-8859-1"),"utf-8");

Http响应

http响应包含响应行、响应头和实体内容三部分。具体格式如下:

1)响应行

格式:协议版本 状态码 状态描述

常见状态码:

  200 :  表示请求处理完成并完美返回

      302:   表示请求需要进一步细化。常用语重定向。

  404:   表示客户访问的资源找不到。

      500:   表示服务器的资源发送错误。(服务器内部错误)

2)响应头

HttpServletResponse对象

常用API:

  响应行:

    response.setStatus() 设置状态码

  响应头:

    response.setHeader("name","value");

  实体内容:

    response.getWriter.write(); 发送字符实体内容

    response.getOutputStream.write(); 发送字节实体内容

  响应编码格式设置:

    response.setContentType("text/html;charset=utf-8");

posted on 2017-03-03 12:03  Dev_Nick  阅读(180)  评论(0编辑  收藏  举报