美文网首页
HTTP请求与相应报文

HTTP请求与相应报文

作者: 红烧猪弯弯 | 来源:发表于2018-03-14 11:36 被阅读0次

    HTTP请求报文

    HTTP请求报文.png
    1. 请求方法,大多数浏览器支持的,也是最常用的方法是GET与POST,此外还有DELETE、HEAD、OPTIONS、PUT、TRACE
    2. 请求url,非完整访问url,它和报文头的Host属性组成完整的请求URL
    3. 协议名称与版本
    4. HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
    5. 报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据


      HTTP请求报文结构图.png

    HTTP请求报文头属性

    • Accept : 告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type表示指定类型,例如Accept:text/plain
    • Accept-Charset、Accept-Encoding、Accept-Language : 能接受的字符集(gb2312、gbk、utf-8)、编码方式(指是否支持压缩、什么压缩方式)、语言。
    • Cache-Control : 通用头,指定请求和响应遵循的缓存机制,请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

    no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用。
    no-store : 缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息。
    max-age : 缓存无法返回缓存时间长于max-age规定秒的文档,若不超规定秒浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。若同时还发送了max-stale指令,则使用期可能会超过其过期时间。
    min-fresh : 至少在未来规定秒内文档要保持新鲜,接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象。
    max-stale : 指示客户端可以接收过期响应消息,如果指定max-stale消息的值,那么客户端可以接收过期但在指定值之内的响应消息。
    only-if-cached : 只有当缓存中有副本存在时,客户端才会获得一份副本。
    Public : 指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。
    Private : 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。

    • Connection : 通用头,表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。
    • Authorization : 当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给WEB服务器。
    • If-Match : 如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作,获取文档。
    • If-None-Match : 如果对象的 ETag 改变了,其实也就意味着对象也改变了,才执行请求的动作,获取文档。
    • If-Modified-Since : 如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。例如:If-Modified-Since:Thu, 10 Apr 200809:14:42 GMT
    • If-Unmodified-Since : 如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)
    • If-Range : 浏览器告诉 WEB 服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我。浏览器通过发送请求对象的ETag 或者自己所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。总是跟 Range 头部一起使用。
    • Range : 浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546
    • Host : 客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。如Host:ss1.bdstatic.com
    • Referer : 浏览器向WEB 服务器表明自己是从哪个网页URL获得点击当前请求中的网址/URL
    • User-Agent : 浏览器表明自己的身份(是哪种浏览器)。例如:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
    • Cookie : 客户端的Cookie就是通过这个报文头属性传给服务端的。服务端就是通过HTTP请求报文头的Cookie属性的jsessionid的值来判断客户端的多个请求是否隶属于一个Session

    HTTP响应报文

    HTTP响应报文.png
    1. 报文协议及版本;
    2. 状态码及状态描述;
    3. 响应报文头,也是由多个属性组成;
    4. 响应报文体,即我们真正要的“干货”。

    响应状态码

    和请求报文相比,响应报文多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。

    1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
    2xx 处理成功,一般表示 请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
    3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
    4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
    5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。

    常见状态码

    • 200 OK 处理成功
    • 303 See Other 服务器把你redirect到其它的页面,目标的URL通过响应报文头的Location告诉你
    • 304 Not Modified 告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧
    • 404 Not Found 即找不到页面
    • 500 Internal Server Error 这个错误说明服务器内抛出一堆Error了

    HTTP请求报文头属性

    • Age : 当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。
    • Server : WEB 服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)
    • Accept-Ranges : 对应请求头的Range,WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes表示接受,none表示不接受
    • ETag 一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。
    • Location : 告诉浏览器redirect的url
    • Set-Cookie 服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的,例如:Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

    实例

    下面贴出百度搜索时的HTTP请求与相应报文

    General
    Request URL:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=&oq=cookie&rsv_pq=a23841fb00006729&rsv_t=108aWY5cR%2BmiRe%2FF%2F5HEoTcO2aUOBpm&rqlang=cn&rsv_enter=1&rsv_sug3=46&rsv_sug1=48&rsv_sug7=100&bs=cookie
    Request Method:GET
    Status Code:200 OK
    Remote Address:61.135.169.125:443
    Referrer Policy:no-referrer-when-downgrade
    
    Request Headers
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding:gzip, deflate, br
    Accept-Language:zh-CN,zh;q=0.9
    Cache-Control:max-age=0
    Connection:keep-alive
    Cookie:BAIDUID=B1E65BC97065E85E745CA39BFA616632:FG=1; BIDUP...后面一大串就不贴了
    Host:www.baidu.com
    Upgrade-Insecure-Requests:1
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
    
    Response Headers
    Bdpagetype:3
    Bdqid:0x9eb46b2f0002276f
    Bduserid:1452321556
    Cache-Control:private
    Ckpacknum:2
    Ckrndstr:f0002276f
    Connection:Keep-Alive
    Content-Encoding:gzip
    Content-Type:text/html;charset=utf-8
    Date:Wed, 14 Mar 2018 03:29:37 GMT
    P3p:CP=" OTI DSP COR IVA OUR IND COM "
    Server:BWS/1.1
    Set-Cookie:PSINO=2; domain=.baidu.com; path=/
    Set-Cookie:BD_CK_SAM=1;path=/
    Set-Cookie:BDSVRTM=37; path=/
    Set-Cookie:H_PS_PSSID=1459_19033_21088_22157; path=/; domain=.baidu.com
    Set-Cookie:BDRCVFR[Fc9oatPmwxn]=mk3SLVN4HKm; path=/; domain=.baidu.com
    Strict-Transport-Security:max-age=172800
    Transfer-Encoding:chunked
    Vary:Accept-Encoding
    X-Powered-By:HPHP
    X-Ua-Compatible:IE=Edge,chrome=1
    

    相关文章

      网友评论

          本文标题:HTTP请求与相应报文

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