zoukankan      html  css  js  c++  java
  • HTTP请求与HTTP响应

    HTTP请求与HTTP响应

     

     

    一、            HTTP请求

    HTTP请求信息又三部分组成:

    • ·请求行(包括请求方法、URI、协议/版本)
    • ·请求头(Request Header)
    • ·请求正文

    下面是一个HTTP请求的数据:

    POST http://xg.mediportal.com.cn/health/sms/verify/telephone HTTP/1.1

    User-Agent: DGroupPatient/1.052701.230/Dalvik/2.1.0(Linux; U; Android 5.1.1; KIW-AL10 Build/HONORKIW-AL10)

    Content-Type: application/x-www-form-urlencoded;charset=UTF-8

    Host: xg.mediportal.com.cn

    Connection: Keep-Alive

    Accept-Encoding: gzip

    Content-Length: 33

    telephone=15527177736&userType=1&

    1、请求行

    POST http://xg.mediportal.com.cn/health/sms/verify/telephone HTTP/1.1

    以回车为结尾,以空格分隔。“POST”是请求方法。” http://xg.mediportal.com.cn/health/sms/verify/telephone”是URL,” HTTP/1.1”是协议版本

    HTTP请求方法:

    GET

    请求获取由Request-URI所标识的资源

    POST

    在Request-URI所标识的资源后附加新的数据

    HEAD

    请求获取由Request-URI所标识的资源的响应消息报头

    OPTIONS

    请求查询服务器的性能,或查询与资源相关的选项和需求

    PUT

    请求服务器存储一个资源,并用Request-URI作为其标识

    DELETE

    请求服务器删除由Request-URI所标识的资源

    TRACE

    请求服务器回送收到的请求信息,主要用语测试或诊断

    其中GET和POST是最常用的的请求方法。

    ·GET用于获取数据,就是只获取服务器的资源,而POST用于提交数据,使得服务器的数据更新。

    ·GET查询字符串(名称/值对)实在GET请求的URL中发送的,POST查询字符串是在POST请求的HTTP消息主体中发送的


             

    GET


    POST

    后退按钮/刷新

    无害

    数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

    书签

    可收藏为书签

    不可收藏为书签

    缓存

    能被缓存

    不能缓存

    编码类型

    application/x-www-form-urlencoded

    application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

    历史

    参数保留在浏览器历史中。

    参数不会保存在浏览器历史中。

    对数据长度的限制

    是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

    无限制。

    对数据类型的限制

    只允许 ASCII 字符。

    没有限制。也允许二进制数据。

    安全性

    与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

    在发送密码或其他敏感信息时绝不要使用 GET !

    POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

    可见性

    数据在 URL 中对所有人都是可见的。

    数据不会显示在 URL 中。

    2、请求头

    User-Agent: DGroupPatient/1.052701.230/Dalvik/2.1.0(Linux; U; Android 5.1.1; KIW-AL10 Build/HONORKIW-AL10) //用户发送请求的客户端环境

    Content-Type: application/x-www-form-urlencoded;charset=UTF-8   //表单默认的提交数据的格式

    Host: xg.mediportal.com.cn   //请求资源的Internet主机和端口号

    Connection: Keep-Alive     //持久链接

    Accept-Encoding: gzip    //浏览器能解码的数据格式

    Content-Length: 33    //请求正文的长度

    3、请求正文

    telephone=15527177736&userType=1&

    请求头与请求正文键是一个空行,这个行非常重要,表示请求头已经结束,接下来是请求正文,请求正文中可以包含客户端提交的查询字符串信息。

    二、    HTTP响应

    与HTTP请求类似,也由三部分构成:

    • ·状态行
    • ·响应头(Request Header)
    • ·响应正文

    下面是一个响应例子

    HTTP/1.1 200 OK   //状态行
    Server: nginx
    Date: Tue, 31 May 2016 02:09:24 GMT
    Content-Type: application/json;charset=UTF-8
    Connection: keep-alive
    Vary: Accept-Encoding
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form-urlencoded
    Access-Control-Allow-Methods: GET,POST,OPTIONS
    Content-Length: 49

    {"resultCode":1,"resultMsg":"手机号未注册"}   //正文

    1、 状态行

    HTTP/1.1 200 OK

    协议版本、数字形式的状态码、响应的状态描述三部分构成。

    ·1xx   指示信息--请求已接收,继续处理

    ·2xx    成功--请求已被成功接收

    ·3xx    重定向—要完成请求必须进行重定向操作

    ·4xx   客户端错误—请求有语法错误或请求无法实现

    ·5xx    服务端错误—服务器未能实现合法请求

    关于状态码,在另一篇文章里已经讲过,此处就不展开细讲。

    2、 响应头

    响应头可能包括以下: 

    ·Location

    响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务 器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在JSP中使用重定向语句的时候,服务器 端向客户端发回的响应报头中,就会有Location响应报头域。  

    ·Server

    响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子:Server: Apache-Coyote/1.1

    ·WWW-Authenticate

    响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basic realm="Basic Auth Test!"

    从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。

    ·Content-Encoding

    实体报头域被使用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content- Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding主要用语记录文档的压缩方法,下面是它的一个例子: Content-Encoding: gzip。如果一个实体正文采用了编码方式存储,在使用之前就必须进行解码。

    ·Content-Language

    实体报头域描述了资源所用的自然语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。 如果这个实体内容仅仅打算提供给丹麦的阅读者,那么可以按照如下的方式设置这个实体报头域:Content-Language: da。

    如果没有指定Content-Language报头域,那么实体内容将提供给所以语言的阅读者。

    ·Content-Length

    实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。

    要注意的是:这个长度仅仅是表示实体正文的长度,没有包括实体报头的长度。

    ·Content-Type

    实体报头域用语指明发送给接收者的实体正文的媒体类型。例如:

    Content-Type: text/html;charset=ISO-8859-1

         Content-Type: text/html;charset=GB2312

    · Last-Modified

    实体报头域用于指示资源最后的修改日期及时间。

     ·Expires

    实体报头域给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用 户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,我们可以使用Expires实体报头域指定页面过期的时 间。当用户又一次访问页面时,如果Expires报头域给出的日期和时间比Date普通报头域给出的日期和时间要早(或相同),那么代理服务器或浏览器就 不会再使用缓存的页面而是从服务器上请求更新的页面。不过要注意,即使页面过期了,也并不意味着服务器上的原始资源在此时间之前或之后发生了改变。

    Expires实体报头域使用的日期和时间必须是RFC 1123中的日期格式,例如:

         Expires: Thu, 15 Sep 2005 16:00:00 GMT

         HTTP1.1的客户端和缓存必须将其他非法的日期格式(也包括0)看作已过期。例如,为了让浏览器不要缓存页面,我们也可以利用Expires实体报头 域,设置它的值为0,如下(JSP):response.setDateHeader("Expires",0);

  • 相关阅读:
    com.jsj.dao====新闻发布系统(4)
    java类加载器,getClassLoader()
    类名.class的理解
    static{}和{}===静态模块和普通模块的理解
    com.jsj.factory====新闻发布系统(3)
    怎么做(我直接敲代码,有解释)===新闻发布系统(2)
    (8)小项目--界面的代码
    (7) 小项目
    2 Servlet(1)
    RMQ之ST算法模板
  • 原文地址:https://www.cnblogs.com/zichil/p/8478896.html
Copyright © 2011-2022 走看看