zoukankan      html  css  js  c++  java
  • Http协议

    (一) Http协议入门

    1.1 什么是http协议:

      超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

    HTTP协议的主要特点可概括如下:

    • 1.支持客户/服务器模式。
    • 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    • 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    • 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    1.2 查看http协议的简便工具:

    1)使用火狐的firebug插件(右键->firebug->网络)

    2)使用谷歌的“审查元素” -> 网络

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

      a)telnet localhost 8080      访问tomcat服务器

      b)ctrl+]     回车          可以看到回显

      c)输入请求内容

                                                                    

    GET /day09/hello HTTP/1.1

    Host: localhost:8080

      d)回车,即可查看到服务器响应信息。

                        

    1.3 http协议内容

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

    1 GET /day09/hello HTTP/1.1               -请求行  请求方式  资源位置URI  协议版本
    2 Host: localhost:8080                    --请求头(多个key-value对象)
    3 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
    4 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5 Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
    6 Accept-Encoding: gzip, deflate
    7 Connection: keep-alive
    8                                     --一个空行
    9 name=Infaraway&password=123456             --(可选)实体内容

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

    1 HTTP/1.1 200 OK                --响应行   协议版本   状态码   状态描述
    2 Server: Apache-Coyote/1.1         --响应头(key-vaule)
    3 Content-Length: 24 
    4 Date: Fri, 30 Jan 2015 01:54:57 GMT
    5                                    --一个空行
    6 this is hello servlet!!!           --实体内容

     

    (二)Http请求

    2.1 请求行

    请求方法列举:

    • GET     请求获取Request-URI所标识的资源
    • POST    在Request-URI所标识的资源后附加新的数据
    • HEAD    请求获取由Request-URI所标识的资源的响应消息报头
    • PUT     请求服务器存储一个资源,并用Request-URI作为其标识
    • DELETE  请求服务器删除Request-URI所标识的资源
    • TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
    • CONNECT 保留将来使用
    • OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

    应用举例:
    GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源;

    •   a)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。
    •   b)GET提交参数数据有限制,不超过1KB。
    •   c)GET方式不适合提交敏感密码。
    •   d)注意: 浏览器直接访问的请求,默认提交方式是GET方式

    POST方法:要求被请求服务器接受附在请求后面的数据,常用于提交表单。

    •   a)参数不会跟着URI后面。参数而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。
    •   b)POST提交的参数数据没有限制。
    •   c)POST方式提交敏感数据。

    2.2  请求头

     1 Accept: text/html,image/*      -- 浏览器接受的数据类型
     2 Accept-Charset: ISO-8859-1     -- 浏览器接受的编码格式
     3 Accept-Encoding: gzip,compress  --浏览器接受的数据压缩格式
     4 Accept-Language: en-us,zh-       --浏览器接受的语言
     5 Host: www.it315.org:80          --(必须的)当前请求访问的目标地址(主机:端口)
     6 If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后的缓存时间
     7 Referer: http://www.it315.org/index.jsp      -- 当前请求来自于哪里
     8 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --浏览器类型
     9 Cookie:name=eric                     -- 浏览器保存的cookie信息
    10 Connection: close/Keep-Alive            -- 浏览器跟服务器连接状态。close: 连接关闭  keep-alive:保存连接。
    11 Date: Tue, 11 Jul 2000 18:23:51 GMT      -- 请求发出的时间

    2.3 实体内容

    只有POST提交的参数会放到实体内容中

    2.4 HttpServletRequest对象 

      HttpServletRequest对象 作用是用于获取请求数据

    核心的API:
    请求行:

    • request.getMethod(); 请求方式
    • request.getRequetURI() / request.getRequetURL() 请求资源
    • request.getProtocol() 请求http协议版本


    请求头:

    • request.getHeader("名称") 根据请求头获取请求值
    • request.getHeaderNames() 获取所有的请求头名称

    实体内容:

    • request.getInputStream() 获取实体内容数据

         

    2.5 传递的请求参数的获取               

    GET方式: 参数放在URI后面
    POST方式: 参数放在实体内容中

    获取GET方式参数:

    • request.getQueryString();

    获取POST方式参数:

    • request.getInputStream();

    问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析。
    所以可以使用统一方便的获取参数的方式:
    核心的API:

    • request.getParameter("参数名"); 根据参数名获取参数值(注意,只能获取一个值的参数)
    • request.getParameterValue("参数名“);根据参数名获取参数值(可以获取多个值的参数)
    • request.getParameterNames(); 获取所有参数名称列表

    (三)Http响应

    1 HTTP/1.1 200 OK                --响应行   协议版本   状态码   状态描述
    2 Server: Apache-Coyote/1.1         --响应头(key-vaule)
    3 Content-Length: 24 
    4 Date: Fri, 30 Jan 2015 01:54:57 GMT
    5                                    --一个空行
    6 this is hello servlet!!!           --实体内容

    3.1 状态码:

    状态行格式如下:
    HTTP-Version Status-Code Reason-Phrase CRLF
    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    • 1xx:指示信息--表示请求已接收,继续处理
    • 2xx:成功--表示请求已被成功接收、理解、接受
    • 3xx:重定向--要完成请求必须进行更进一步的操作
    • 4xx:客户端错误--请求有语法错误或请求无法实现
    • 5xx:服务器端错误--服务器未能实现合法的请求

    常见状态代码、状态描述、说明:

    • 200 OK                           //客户端请求成功
    • 400 Bad Request             //客户端请求有语法错误,不能被服务器所理解
    • 401 Unauthorized            //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    • 403 Forbidden                //服务器收到请求,但是拒绝提供服务
    • 404 Not Found                //请求资源不存在,eg:输入了错误的URL
    • 500 Internal Server Error //服务器发生不可预期的错误
    • 503 Server Unavailable    //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

     

    3.2 响应头:

     1 Location: http://www.it315.org/index.jsp   -表示重定向的地址,该头和302的状态码一起使用。
     2 Server:apache tomcat                 ---表示服务器的类型
     3 Content-Encoding: gzip                 -- 表示服务器发送给浏览器的数据压缩类型
     4 Content-Length: 80                    --表示服务器发送给浏览器的数据长度
     5 Content-Language: zh-cn               --表示服务器支持的语言
     6 Content-Type: text/html; charset=GB2312   --表示服务器发送给浏览器的数据类型及内容编码
     7 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  --表示服务器资源的最后修改时间
     8 Refresh: 1;url=http://www.it315.org     --表示定时刷新
     9 Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)
    10 Transfer-Encoding: chunked
    11 Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服务器发送给浏览器的cookie信息(会话管理用到)
    12 Expires: -1                           --表示通知浏览器不进行缓存
    13 Cache-Control: no-cache
    14 Pragma: no-cache
    15 Connection: close/Keep-Alive           --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接

    3.3 HttpServletResponse对象

    HttpServletResponse对象修改响应信息:

    响应行:

    • response.setStatus() 设置状态码

    响应头:

    • response.setHeader("name","value") 设置响应头

    实体内容:

    • response.getWriter().writer(); 发送字符实体内容
    • response.getOutputStream().writer() 发送字节实体内容
  • 相关阅读:
    媒体格式分析之flv -- 基于FFMPEG
    x264源代码分析-转
    比特币的相关问题整理(详细的)
    比特币价格首超黄金 年涨幅超7600%
    比特币不是虚拟货币,这是一个真实世界----李笑来
    比特币投机者嘲笑称比特币为泡沫的人原因
    比特币:一个让投资人为之疯狂的神奇货币
    比特币沉浮录
    比特币淘金热席卷中国专业“挖矿机”受疯抢
    国内首起比特币交易平台诈骗案涉案人被捕
  • 原文地址:https://www.cnblogs.com/infaraway/p/6533183.html
Copyright © 2011-2022 走看看