HTTP协议浅析

一、HTTP协议简介

      浏览器和Web服务器之间一问一答的交互过程遵守一定的规则,这个规则就是HTTP协议。HTTP协议时TCP/IP协议集中的一个应用层协议,定义了浏览器和Web服务器之间交换数据过程和数据本身的格式。现在广泛应用的有HTTP/1.0和HTTP/1.1两个版本,1.1和1.0相比最大的特点就是增加对长连接的支持。

二、协议流程

2.1 HTTP/1.0的通信过程

HTTP/1.0只支持短连接,每次连接只处理一个请求,即使对同一站点的每一个页面的访问,浏览器和服务器之间都要建立一次单独的链接

2.2 HTTP/1.1的通信过程

      HTTP/1.1支持长连接,在一个TCP连接上可以传送多个HTTP请求和应答,减少建立和关闭连接的消耗和延迟。例如一个包含多张图片资源的网页文件的多个请求和响应可以在同一个连接中传输,并且还允许浏览器客户端不用等待上一次请求的结果返回就可以发送下一个请求,也就是支持pipeline管线化。

三、HTTP请求

      完整的HTTP请求包括:一个请求行、若干HTTP头域和可选的实体内容三部分:

3.1  请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议版本,格式如下:

Method  Request-URI  HTTP-Version CRLF

其中的Method表示请求方法,Request-URI是同一资源标识符,HTTP-Version表示请求的HTTP协议版本,CRLF表示回车换行。

请求方法有8种,方法名全为大写:

      (1)GET    请求获取Request-URI指定的资源

      (2)HEAD 请求获取Request-URI制定资源的响应消息报头

      (3)POST  用于向服务器提交数据,正常情况下带有“消息体“

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

      (5)DELETE   请求服务器删除Request-URI所标识的资源

      (6)TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

      (7)CONNECT 保留将来使用

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

3.2   HTTP头域

      HTTP头域分为四种:通用头域、请求头域、响应头域和实体头域。每个头域由一个域名、冒号和域值三部分组成,域名大小写无关,域值前可以添加任何数量的空格符。

3.2.1  通用头域

        通用头域是指请求和响应都支持的HTTP头域,最常见的有Cache-Control、Connection和Transfer-Encoding,具体含义如下:

       (1) Cache-Control:指定请求和相应遵循的缓存机制,最常见的值是no-cache,指示请求和响应消息不能缓存;

       (2) Connection:用于指定处理完本次请求/响应后,客户端和服务器是否还要继续保持连接;

       (3) Transfer-Encoding:用于指定实体内容的传输编码方式。

3.2.2  请求头域

请求头域是只有在请求头中带有的,用于向服务器传递关于请求或者关于客户端的附件信息。常见的有:Accept、Accept-Encoding、Accept-Language、Accept-Charset、Host、Referer、User-Agent和Cookie,具体含义如下:

(1)    Accept: 用于指定客户端程序能够处理的MIME类型,多个时用逗号隔开;

(2)    Accept-Encoding:指定客户端程序支持的压缩方式;

(3)    Accept-Language: 指定客户端期望返回哪个国家语言的文档;

(4)    Accept-Charset:指定客户端程序可以使用的字符集;

(5)    Host:指定资源所在的主机名和端口号;

(6)    Referer:指定请求uri的源资源地址,也就是用户从哪个uri过来,允许服务器生成回退链表;

(7)    User-Agent:浏览器客户端信息,如使用哪种浏览器等;

(8)    Cookie:服务器在浏览器端留下的信息,这是最重要的请求头字段之一,例如访问百度的时候通常会带有类似如下的Cookie:

BAIDUID=27C48D40C9CDCF48CEAAFCFD9C47FC52:FG=1; BD_UTK_DVT=1

3.2.3  响应头域

响应头域只在HTTP响应中出现,在第4章节详细讲解。

3.2.4  实体头域

      HTTP请求和响应中都可以包含实体头域,实体头域包含实体内容的一些信息。常见的实体头域有:Content-Encoding、Content-Length、Content-Type和Expires,具体含义如下:

          (1)    Content-Encoding:指明实体内容采用的压缩方式;

          (2)    Content-Length:指明实体内容的长度,单位为字节;

          (3)    Content-Type:指定实体内容的MIME类型;

          (4)    Expires:指明实体内容在什么时间之后过期,不再缓存。

3.3 可选实体内容

         HTTP请求是否带有实体内容主要看请求行中的请求方法,我们只分析GET和POST两种主要的类型,GET方法用于获取服务器上的特定资源,一般没有实体内容。POST方法用于向服务器提交数据,一般带有实体内容。

四、HTTP应答包括一个状态行、若干消息头和实体内容三部分组成

状态行以HTTP协议版本开头,后面跟着状态码和简单的状态描述,格式如下:

      HTTP-Version  Status-Code  Reason-Phrase  CRLF

      其中的Status-Code是一个三个数字组成的返回状态码,Reason-Phrase提供一个简单的状态描述,如对于200成功页面就是“OK”,对于404页面未找到错误就是“Not Found”。

HTTP应答的状态行根据状态码可以分为五种类型:

       (1)1xx:信息,请求收到,继续处理;

       (2)2xx:成功,行为被成功地接受、理解和采纳;

       (3)3xx:重定向,为了完成请求,必须进一步执行的动作;

       (4)4xx:客户端错误,请求包含语法错误或者请求无法实现;

       (5)5xx:服务端错误,服务器不能正确执行一个正确的请求。

 4.2 HTTP头域

       前面我们介绍过HTTP头域可以分为四种,HTTP应答包含通用头域、响应头域和实体头域,通用头域和实体头域前面已经介绍过,本节主要介绍响应头域。

       响应头域允许服务器传递不能放在状态行中的附件信息,主要用于描述服务器的信息和Request URI的进一步信息,检索前段Web服务器测试中最常见的响应头域有Server、Location、Set-Cookie和P3P,具体含义如下:

      (1)    Server:说明响应服务器的名称,如BWS/1.0或者Apache/1.3.27;

      (2)    Location:在302跳转页面应答的时候,带有Location指明跳转的目的地址;

      (3)    Set-Cookie:服务器对浏览器端设置Cookie,例如不带Cookie访问BWS的时候,BWS会返回类似如下的Set-Cookie内容:BAIDUID=B589E67D8A2C6B15C2FDD8F20C3DC0D5:FG=1; expires=Wed, 26-Aug-39 01:47:59 GMT; path=/; domain=.baidu.co

      (4)    P3P:设置允许Cookie的跨域访问,BWS模块在设置Cookie的时候通常会带有该头域

P3P: CP=" OTI DSP COR IVA OUR IND COM "

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,569评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,325评论 6 152
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,210评论 0 7
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,200评论 3 82
  • 我写的第一个故事是在小学二年级。内容大概是一对贫穷的老夫妇救了一只受伤的小白兔。第二天,小白兔变成了一个漂亮的大姑...
    曹静郑州阅读 606评论 7 6