HTTP协议浅析

� 应用范围

Web的应用层协议是Http.
Http协议并不规定浏览器如何解析HTML页面,仅仅是制定了Http客户机与Http服务器之间的数据传输规则。
用户可以通过设置浏览器来控制并行连接数。大部分浏览器默认开启5~10个连接数。每个连接处理一个请求——响应事物。

实现

Http由两部分程序实现:一个Client程序和一个Server程序
这两部分程序运行于不同的端系统中,通过交换HTTP报文进行会话。�
HTTP制定了报文的格式以及报文的交换过程。
Web浏览器实现了Http协议的客户端部分。Web服务器实现了HTTP协议的服务端部分。
流行的Web服务器有Apache 和 Microsoft IIS

Http协议的下层协议

Http的下层(传输层)支撑协议是TCP,而不是UDP。

Http是无状态协议

  • 服务器像客户机发送被请求文件时,不会记录目的客户机的任何信息。
  • 客户机在短时间内重复请求同一个文件,服务器仍然会做出响应,并发送文件给客户机。
  • 基于上述两点说明Http协议是无状态的。

连接方式

  • 非持久连接
    开始通信之前先建立连接,完成数据传输以后,释放连接
    缺点:1.必须为每个请求对象建立并维护一个全新的连接,客户机和服务器必须为该连接分配TCP缓冲区和 变量,这严重增加了服务器的负担,一个服务器可能同时服务于成千上万的客户机。
    2.每个对象的传输时延为两个RTT,一个用于建立TCP连接,一个用于请求和接收一个对象。

  • 持久连接
    相同客户机与服务器之间的后续请求通过初次建立的那个连接(而不是重新创建连接)。
    如果一个连接经过一定的时间间隔(一个可配置的时间)仍未被使用过, HTTP服务器会关闭该连接。
    HTTP服务器默认就是使用了流水线方式的持久连接。

RTT

从客户机请求HTML页面开始到用户端进程接收到完整的HTML页面为止的整个往返时间(Round-Trip Time)

TCP三次握手

1.客户机向服务器发送一个小的TCP报文段
2.服务器用一个小的TCP报文段作出确认和响应
3.客户机向服务器返回确认
一个RTT等于三次握手中前两部分消耗的时间。
完成三次握手的前两部分以后,客户机将三次握手第三个部分与一个Http请求报文结合起来发送到该TCP连接。
一旦请求到达TCP服务器,服务器向该TCP连接发送HTML文件。该Http请求又耗掉一个RTT.

Http报文格式

[RFC 2616]定了HTTP报文格式。
Http报文格式共有两种:

  • 请求报文格式
    示例:
   GET /somedir/page.html HTTP/1.1
   HOST: www.someschool.edu
   connection:close
   User-agent:Mozilla/4.0
   Accept-language:fr

说明:
1.此报文格式第一行被称作请求行
2.请求行的第一个字段是方法字段 用于指定发送请求的方法,这里的方法是GET,
还有其他方法如POST HEAD PUT DELETE
3.绝大多数HTTP请求使用GET方法
4.在URL字段填写请求对象的URL
5.最后一个字段指定了浏览器实现的HTTP协议的版本,这里是1.1版本
6.第二行指定了目的主机
7.User-agent这一行用来指定用户代理,即向服务器发送请求的浏览器类型,这一行可以帮助服务器为不同类型的浏览器返回不同版本的对象。
8.最后一行指定了对象的法语版本,如果服务器中有这样的对象,否则使用服务器的默认版本
9.首部行之后是实体主体。使用GET方法时,实体主体为空,使用POST方法时实体主体才有内容。

  • 响应报文格式
  HTTP/1.1 200 OK  // 初始化状态行
  Connection:close // 报文发送完成之后关闭了TCP连接
  Date:Thu, 03 Jul 2003 12:00:15 GMT // 从服务器文件系统中检索到文件并加入到响应报文开始发送的时间
  Server:Apache/1.3.0 (Unix) // 服务器类型
  Last-Modified:Sun, 6 May 2007 09:23:24 GMT // 对象创建或者最后修改的时间
  Content-Length:6821 // 被发送对象的字节数
  Content-Type:text/html // 对象的类型
  (data data data) // 实体主体
  • 常见响应状态码
    200 Ok:请求成功。信息包含在返回的响应报文中
    301 moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中指定,客户机软件自动用新的URL请求此对象
    400 Bad Request:一个通用的差错代码,指示该请求不能被服务器理解
    404 Not Found:被请求的文档不在服务器上
    505 Http Version Not Supported:服务器不支持请求报文的协议版本

示例1:
请求命令:

    telnet cis.poly.edu 80
    GET /~ross/ HTTP/1.1
    Host:cis.poly.edu

响应报文:

    HTTP/1.1 301 Moved Permanently
    Date: Thu, 01 Oct 2015 02:31:56 GMT
    Server: Apache/1.3.41 (Unix) mod_perl/1.31
    Location: http://nyu.edu/projects/keithwross/
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=iso-8859-1
    
    ef 
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>301 Moved Permanently</TITLE>
    </HEAD><BODY>
    <H1>Moved Permanently</H1>
    The document has moved <A HREF="http://nyu.edu/projects/keithwross/">here</A>.<P>
    </BODY></HTML>
    
    0
    
    Connection closed by foreign host.

示例2:
请求命令:

    telnet cis.poly.edu 80
    HEAD /banana/ HTTP/1.1
    Host:cis.poly.edu

响应报文:

    HTTP/1.1 404 Not Found
    Date: Thu, 01 Oct 2015 02:37:03 GMT
    Server: Apache/1.3.41 (Unix) mod_perl/1.31
    Content-Type: text/html; charset=iso-8859-1
    Connection closed by foreign host.

Cookie

  • Web站点通常希望能够识别用户。主要有以下两个目的:
    1.服务器想限制用户的访问

    2.服务器想把内容与用户身份关联起来

    基于上述的两个原因,HTTP使用了Cookie

  • Cookie技术有四个组成部分
    1.Http响应报文中有一个Cookie首部行
    2.Http请求报文中有一个Cookie首部行
    3.在用户端系统中保留有一个Cookie文件,由用户的浏览器负责管理
    4.在Web站点有一个后端数据库

  • 建立Cookie的步骤:
    1.浏览器首次访问某个网站时,请求发送到

Web缓存

  • Web缓存即代理服务器,能够代表初始Web 服务器来满足Http请求的网络实体。Web缓存有自己的磁盘存储空间,并在该存储空间中保存最近请求过的网络拷贝。

  • 通过浏览器配置可以设置Web缓存,一旦配置了Web缓存,每个浏览器对一个对象的请求首先被定向到Web缓存器

  • Web缓存工作过程
    1.浏览器建立一个到Web代理服务器的TCP连接,并向代理服务器发送一个请求
    2.代理服务器检查磁盘是否存储了请求对象的拷贝。如果有,代理服务器用此对象回应请求。
    3.如果代理服务器没有缓存这个对象,代理服务器会于该请求的初始服务器建立一个TCP连接,代理服务器把请求转发给初始化服务器,初始服务器向Web代理服务器做出响应,并返回请求对象给代理服务器。
    4.代理服务器接收到响应的对象以后在自己的磁盘上建立一份拷贝,同时用Http响应报文向发出请求的客户机浏览器发送该拷贝(通过最初建立的客户机浏览器与代理服务器之间的TCP连接)。

    根据上述的特征,Web缓存器既是服务器也是客户机。

  • 部署Web缓存器的好处
    1.在网络上部署Web缓存器可以大大减少客户机请求的响应时间,尤其是客户机与初始服务器之间的瓶颈带宽远远低于客户机与Web缓存器之间的瓶颈带宽时更为明显。如果客户机与Web缓存器之间有一个高速连接,并且用户请求的对象放在Web缓存器上(实际情况通常是这样,则Web缓存器可以迅速将对象交付客户机)
    2.Web缓存器可以大大减少一个机构内部网与因特网接入链路上的通信量。通过减少通信量,该机构就不必急于增加带宽,因此会降低成本。
    3.Web缓存器能从整体上大大降低因特网上的Web流量,从而改善所有应用的性能。

条件GET

  • 条件GET是HTTP协议的一种请求方式。
  • 为什么引入条件GET?
    1.通过高速Web缓存请求的对象,是由Web缓存器首次向初始服务器请求的对象的拷贝。随着时间的推移,该拷贝的原始版本可能已经发生了很大的改变。为了保证客户机请求到的数据是最新的,HTTP提供了条件GET这种机制,条件GET允许缓存器证实它所缓存的对象是否是最新的。
  • 条件GET特点:
    如果请求报文使用GET方法,并且请求报文中含有If-modified-since:首部行。那么可以确定此请求报文是一个条件GET报文
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容