HTTP协议杂记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JBlock/article/details/79322450

    前几天,看到新闻,Google将于2018年7月份全部换掉HTTP,改为更加安全的HTTPS,看着手里刚到手的关于HTTP的书籍,情可复杂啦!不过,纵使HTTP终将逝去,那么等我退休好不好?大笑

    今天我们不讨论过于复杂的协议问题,只是对HTTP的请求报文和响应报文进行分析。

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过http协议做一个类似于解码的工作,这样浏览器才能理解这个数据,然后为我们展示出来百度首页.

    这相当于是一种规范,网络中数据的传输在位于应用之下的各层(传输层,应用层)来完成的,在tcp/ip协议接收到数据时,我们是不能直接使用和浏览的,需要先通过一种规范来进行梳理,也就是解码,得到浏览器支持的一种格式,才能被我们使用.

  在web开发中,熟悉http协议中的报文结构是很重要的,比如,如果对http报文不熟悉,在使用httpServletRequest很多方法的时候,就会陷入懵逼.

  http报文分为请求报文和响应报文.

请求报文(request message)

  请求报文分为三部分:首行,请求头,请求体.

  首行包括:请求类型,URL,HTTP版本.

  请求头部保存一些键值对的属性.

  请求体保存具体内容,一般为POST类型的参数.

  

常见的HTTP请求头属性

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept:告诉服务端,该请求所能支持的响应数据类型,专业术语称为MIME 类型,上图中表示支持text/html的响应格式.q代表权重,按照权重高低进行执行,没有默认为1

  扩展:text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型)

Cookie:seraph.confluence=6389808%3A04c906749aac37bbfe595ff3149ac5c17bfcd298;Hm_lvt_4a7d8ec50cfd6af753c4f8aee3425070=1477401172,1479201037,1479895114; _ga=GA1.2.1021401543.1477401172; JSESSIONID=6C331887C562AF7839384C41D590CA9A;

 Cookie:将客户端的cookie放在请求头里一并发送给服务器端.

   

 这里就出了一个问题,网站A怎么保证自己请求体中保存的cookie就是网站A的cookie而不是网站B的cookie呢,这就和cookie里面的jsessionid有关系了,关于cookie,session,sessionid,jsessionid的区别联系,可以参考这个博文点击打开链接

referer:https://www.baidu.com/linkurl=fjKPqTaoZV2a2g2H2kbBwdz0mgBgI06WLrVLrQhiKgu&wd=&eqid=841d77d20000a7ae00000004586b7070

 Referer:对请求中URI的原始请求方。表示这个请求是从哪个url跳过来的,通过百度来搜索淘宝网,那么在进入淘宝网的请求报文中,Referer的值就是:www.baidu.com

Cache-Control:max-age=0。max-age响应的最大age值。当指定的max-age=0时,那么缓存服务器通常需要将请求转发给源服务器。

 Cache-control:对服务端返回的相应内容进行缓存控制,即是否需要在客户端保存下来,如上表示不缓存.

User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

 User-Agent:用户代理,简称 UA,是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等信息

Connection:keep-alive

 Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接

  Accept-Charset:iso-8859-5,unicode-1-1;q=0.8

  首部可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。可一次性指定多种字符集。与Accept相同的是可用权重q值来表示相对优先级。

  Host:首部字段会告诉服务器,请求资源所处的互联网主机名和端口号,首部字段Host和以单台服务器分配多个域名的虚拟主机的工作机制有着密切联系,这就是首部字段Host必须存在的意义。因为相同的ip下可能运行着多个域名。

  From:首部字段用来告知服务器使用用户代理的用户的电子邮件地址。

  更多请求头属性可以参考这篇文章:HTTP响应头和请求头信息对照表

响应报文(response message)

  响应报文也由三部分组成,首行,响应头,响应体.

  首行分为报文协议及版本,响应码及状态描述

  

  状态码

1XX:信息性状态码

2XX:成功状态码,200 表示成功

3XX:重定向状态码

4XX:客户端错误状态码,404表示没有找到请求的资源

5XX:服务器端错误状态码,500表示内部错误

 Set-Cookie:开始状态管理所使用的Cookie信息。

 Content-Language:zh-CN 首部字段会告诉客户端,实体主体使用的自然语言。

 Etag:首部字段告诉客户端实体标识。它是一种可将资源以字符串形式做唯一标识的方式。服务器会为每份资源分配对应的Etag值。当资源更新时Etag值也需要更新。

 Content-Encoding:首部字段会告诉客户端服务器对实体的主体部分选用的内容编码格式。主要采用gzip(GNU zip),compress,deflate,identity(不编码)

 HTTP也许终将逝去,在它还有的几年时光里,我们应该好好了解一下这个曾经做了很大贡献的,人类智慧的结晶!仅以此篇,献给HTTP协议的制定者和完善者们!!

猜你喜欢

转载自blog.csdn.net/JBlock/article/details/79322450