`

(转载)http协议上

    博客分类:
  • http
阅读更多
引用
转载来自http://xiangxji.iteye.com/blog/648673
作者:Beta技术博客



HTTP 协议浅析(上)
超文本传输协议 (HTTP , HyperText Transfer Protocol) 是 互联网 上应用最为广泛的一种 网络协议 。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
简介
   HTTP 的发展是万维网协会( World Wide Web Consortium )和 Internet 工作小组( Internet Engineering Task Force )合作的结果,(他们)最终发布了一系列的 RFC ,其中最著名的就是 RFC 2616 。 RFC 2616 定义了 HTTP 协议的我们今天普遍使用的一个版本 ——HTTP 1.1 。
   HTTP 是一个客户端和服务器端请求和应答的标准( TCP )。客户端是终端用户,服务器端是网站。通过使用 Web 浏览器 、 网络爬虫 或者其它的工具,客户端发起一个到服务器上指定端口(默认 端口 为 80 )的 HTTP 请求。(我们称这个客户端)叫用户代理( user agent )。应答的服务器上存储着(一些)资源,比如 HTML 文件和图像。(我们称)这个应答服务器为源服务器( origin server )。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道( tunnels )。尽管 TCP/IP 协议 是互联网上最流行的应用, HTTP 协议并没有规定必须使用它和(基于)它支持的层。 事实上, HTTP 可以在任何其他互联网协议上,或者在其他网络上实现。 HTTP 只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
  通常,由 HTTP 客户端发起一个请求,建立一个到服务器指定端口(默认是 80 端口 )的 TCP 连接。 HTTP 服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如 "HTTP/1.1 200 OK" ,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
   HTTP 使用 TCP 而不是 UDP 的原因在于(打开一个)一个网页必须传送很多数据,而 TCP 协议提供传输控制,按顺序组织数据,和错误纠正。
  通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标示符( Uniform Resource Identifiers )(或者,更准确一些, URLs )来标识。
协议功能
   HTTP 是超文本传输协议,是客户端浏览器或其他程序与 Web 服务 器之间的应用层通信协议。在 Internet 上的 Web 服务器上存放的都是超文本信息,客户机需要通过 HTTP 协议传输所要访问的超文本信息。 HTTP 包含命令和传输信息,不仅可用于 Web 访问,也可以用于其他因特网 / 内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。
  当我们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就可以了,例如 www.abc.com, 但是在浏览器的地址栏里面出现的却是: http://www.abc.com , 你知道为什么会多出一个 “http” 吗?
  我们在浏览器的地址栏里输入的网站地址叫做 URL (Uniform Resource Locator , 统一资源定位符 ) 。就像每家每户都有一个门牌地址一样,每个网页也都有一个 Internet 地址。当你在 浏览器的地址框中输入一个 URL 或是单击一个超级链接时, URL 就确定了要浏览的地址。浏览器通过超文本传输协议 (HTTP) ,将 Web 服务器上站点的网页代码提取出来,并翻译成漂亮的网页。因此,在我们认识 HTTP 之前,有必要先弄清楚 URL 的组成 , 例如: http://www.abc.com/china/index.htm 。它的含义如下:
   1. http:// :代表超文本传输协议,通知 abc.com 服务器显示 Web 页,通常不用输入;
   2. www :代表一个 Web (万维网)服务器;
   3. abc.com/ :这是装有网页的服务器的域名,或站点服务器的名称;
   4. China/ :为该服务器上的子目录,就好像我们的文件夹;
   5. Index.htm : index.htm 是文件夹中的一个 HTML 文件(网页)。
  我们知道, Internet 的基本协议是 TCP/IP 协议,然而在 TCP/IP 模型最上层的是应用层( Application layer ),它包含所有高层的协议。高层协议有:文件传输协议 FTP 、电子邮件传输协议 SMTP 、域名 系统服务 DNS 、网络新闻传输协议 NNTP 和 HTTP 协议等。
   HTTP 协议( HyperText Transfer Protocol ,超文本传输协议)是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示 ( 如文本先于图形 ) 等。这就是你为什么在浏览器中看到的网页地址都是以 http:// 开头的原因。
  自 WWW 诞生以来,一个多姿多彩的资讯和虚拟的世界便出现在我们眼前,可是我们怎么能够更加容易地找到我们需要的资讯呢?当决定使用超文本作为 WWW 文档的标准格式后,于是在 1990 年,科学家们立即制定了能够快速查找这些超文本文档的协议,即 HTTP 协议。经过几年的使用与发展,得到不断的完善和扩展,目前在 WWW 中使用的是 HTTP/1.0 的第六版。
协议基础
   HTTP ( HyperText Transfer Protocol )是超文本传输协议的缩写,它用于传送 WWW 方式的数据,关于 HTTP 协议的详细内容请参考 RFC2616 。 HTTP 协议采用了请求 / 响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、 URL 、协议版本、以及包含请求修饰符、客户信息和内容的类似于 MIME 的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
  通常 HTTP 消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。 HTTP 的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号( : )和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
  通用头域
  通用头域包含请求和响应消息都支持的头域,通用头域包含 Cache-Control 、 Connection 、 Date 、 Pragma 、 Transfer-Encoding 、 Upgrade 、 Via 。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在 UPnP 消息中使用的通用头域。
   Cache-Control 头域
   Cache-Control 指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 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 。各个消息中的指令含义如下:
   Public 指示响应可被任何缓存区缓存。
   Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
   no-cache 指示请求或响应消息不能缓存
   no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
   max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
   min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
   max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定 max-stale 消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
   Date 头域
   Date 头域表示消息发送的时间,时间的描述格式由 rfc822 定义。例如, Date:Mon,31Dec200104:25:57GMT 。 Date 描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
   Pragma 头域
   Pragma 头域用来包含实现特定的指令,最常用的是 Pragma:no-cache 。在 HTTP/1.1 协议中,它的含义和 Cache-Control:no-cache 相同。
  请求消息
  请求消息的第一行为下面的格式:
   MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于 Request-URI 完成的方法,这个字段是大小写敏感的,包括 OPTIONS 、 GET 、 HEAD 、 POST 、 PUT 、 DELETE 、 TRACE 。方法 GET 和 HEAD 应该被所有的通用 WEB 服务器 支持,其他所有方法的实现是可选的。 GET 方法取回由 Request-URI 标识的信息。 HEAD 方法也是取回由 Request-URI 标识的信息,只是可以在响应时,不返回消息体。 POST 方法可以请求服务器接收包含在请求中的实体信息,可以用于提交 表单 ,向新闻组、 BBS 、邮件群组和数据库发送消息。
   SP 表示空格。 Request-URI 遵循 URI 格式,在此字段为星号( * )时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。 HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 。 CRLF 表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信 息。请求头域可能包含下列字段 Accept 、 Accept-Charset 、 Accept-Encoding 、 Accept-Language 、 Authorization 、 From 、 Host 、 If-Modified-Since 、 If-Match 、 If-None-Match 、 If-Range 、 If-Range 、 If-Unmodified-Since 、 Max-Forwards 、 Proxy-Authorization 、 Range 、 Referer 、 User-Agent 。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
  典型的请求消息:
   Host: download.microtool.de
   Accept: */*
   Pragma: no-cache
   Cache-Control: no-cache
   User-Agent: Mozilla/4.04[en](Win95;I;Nav)
   Range: bytes=554554-
  上例第一行表示 HTTP 客户端(可能是浏览器、下载程序)通过 GET 方法获得指定 URL 下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
   Host 头域
   Host 头域指定请求资源的 Intenet 主机和 端口号 ,必须表示请求 url 的原始服务器或网关的位置。 HTTP/1.1 请求必须包含 主机头 域,否则系统会以 400 状态码返回。
   Referer 头域
   Referer 头域允许客户端指定请求 uri 的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化 cache 等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的 uri 没有自己的 uri 地址, Referer 不能被发送。如果指定的是部分 uri 地址,则此地址应该是一个 相对地址 。
   Range 头域
   Range 头域可以请求实体的一个或者多个子范围。例如,
  表示头 500 个字节: bytes=0-499
  表示第二个 500 字节: bytes=500-999
  表示最后 500 个字节: bytes=-500
  表示 500 字节以后的范围: bytes=500-
  第一个和最后一个字节: bytes=0-0,-1
  同时指定几个范围: bytes=500-600,601-999
  但是服务器可以忽略此请求头,如果无条件 GET 包含 Range 请求头,响应会以状态码 206 ( PartialContent )返回而不是以 200 ( OK )。
   User-Agent 头域
   User-Agent 头域的内容包含发出请求的用户信息。
  响应消息
     响应消息的第一行为下面的格式:
   HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
   HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 。 Status-Code 是一个三个数字的结果代码。 Reason-Phrase 给 Status-Code 提供一个简单的文本描述。 Status-Code 主要用于机器自动识别, Reason-Phrase 主要用于帮助用户理解。 Status-Code 的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取 5 个不同的值:
   1xx: 信息响应类,表示接收到请求并且继续处理
   2xx: 处理成功响应类,表示动作被成功接收、理解和接受
   3xx: 重定向 响应类,为了完成指定的动作,必须接受进一步处理
   4xx: 客户端错误,客户请求包含语法错误或者是不能正确执行
   5xx: 服务端错误,服务器不能正确执行一个正确的请求
  响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI 进一步的信息。响应头域包含 Age 、 Location 、 Proxy-Authenticate 、 Public 、 Retry-After 、 Server 、 Vary 、 Warning 、 WWW-Authenticate 。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
  典型的响应消息:
   HTTP/1.0200OK
   Date:Mon,31Dec200104:25:57GMT
   Server:Apache/1.3.14(Unix)
   Content-type:text/html
   Last-modified:Tue,17Apr200106:46:28GMT
   Etag:"a030f020ac7c01:1e9f"
   Content-length:39725426
   Content-range:bytes554554-40279979/40279980
  上例第一行表示 HTTP 服务端响应一个 GET 方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
   Location 响应头
   Location 响应头用于重定向接收者到一个新 URI 地址。
   Server 响应头
   Server 响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
   HTTP- 运作方式
   HTTP 协议是基于请求/响应 范式 的。一个客户机与 服务器 建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
  许多 HTTP 通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理 (UA) 和源服务器 (O) 之间通过一个单独的连接来完成。
  当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理 (Proxy) 、 网关 (Gateway) 和通道 (Tunnel) 。一个代理根据 URI 的绝对格式来接受请求,重写全部或部分消息,通过 URI 的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介 ( 例如:防火墙等 ) 或者是中介不能识别消息的内容时,通道经常被使用 .
  实体
  请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括 Allow 、 Content-Base 、 Content-Encoding 、 Content-Language 、 Content-Length 、 Content-Location 、 Content-MD5 、 Content-Range 、 Content-Type 、 Etag 、 Expires 、 Last-Modified 、 extension-header 。 extension-header 允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由 Content-Encoding 或 Content-Type 定义,它的长度由 Content-Length 或 Content-Range 定义。
   Content-Type 实体头
   Content-Type 实体头用于向接收方指示实体的介质类型,指定 HEAD 方法送到接收方的实体介质类型,或 GET 方法发送的请求介质类型 Content-Range 实体头
   Content-Range 实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
   Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
  例如,传送头 500 个字节次字段的形式: Content-Range:bytes0-499/1234 如果一个 http 消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求), Content-Range 表示传送的范围, Content-Length 表示实际传送的字节数。
   Last-modified 实体头
   Last-modified 实体头指定服务器上保存内容的最后修订时间。
  例如,传送头 500 个字节次字段的形式: Content-Range:bytes0-499/1234 如果一个 http 消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求), Content-Range 表示传送的范围, Content-Length 表示实际传送的字节数。
   Last-modified 实体头

分享到:
评论

相关推荐

    转载使用许可协议范本精选.doc

    【转载使用许可协议范本精选】是一份详细规定了甲方(受权方)与乙方(获受权方)之间关于作品使用权限的法律文件。该协议适用于通过特定平台(未在内容中具体提及,标记为_____________)进行的授权交易。以下是...

    转载协议实用.pdf

    但在提供的【部分内容】中,并未显示出与转载协议相关的具体条款或细则,而是出现了一些不完整且缺乏上下文的文字(如“app""*.*.*.**.212123”),这些内容显然不属于转载协议的范畴,且可能仅是文档扫描过程中的...

    【转载】自定义URL Protocol 协议

    3. **测试与调试**:确保所有平台上的协议都能正确解析和处理,可以通过浏览器、邮件客户端等工具进行测试。 **四、示例代码** 在Windows(C#)中,注册协议的代码可能如下: ```csharp using Microsoft.Win32; ...

    最简单分家协议书范本最新转载使用许可协议范本事务所整理.docx

    这里提到的“分家协议书”实际上是指一种授权作品使用的许可协议,而非传统意义上的家庭财产分割协议。此协议旨在规范授权方(即著作权人或其代理人)与获授权方之间的合作关系,确保双方权益得到保障。 #### 二、...

    转载使用许可协议.doc

    【转载使用许可协议】是规范网络内容转载行为的法律文件,旨在确保原创作品的版权得到保护,同时允许符合条件的第三方在一定范围内使用这些作品。以下是协议中的关键知识点: 1. **定义**: - **受权作品**:指的...

    ps/2通信协议转载

    **PS/2通信协议详解** PS/2通信协议是一种经典的接口标准,主要用于连接键盘和鼠标等输入设备到计算机系统。这种协议是半双工的,意味着在同一时刻,数据只能单向传输,即从键盘到主机或者从主机到键盘。由于其简单...

    通俗易懂的USB协议详解(转载).rar_ULPI 接口 信号_fpga/usb3300_ulpi协议_usb3300_usb协

    USB(Universal Serial Bus)协议是一种广泛应用于现代电子设备中的接口标准,它允许设备与计算机进行高速数据传输。本文将深入浅出地解析USB协议,并特别关注ULPI(Ultra Low Pin Interface)接口及其在FPGA(Field...

    转载使用许可协议范本(互联网行业)模版.doc

    综上所述,这份转载使用许可协议涵盖了从定义到授权范围、使用限制、声明与保证等多个方面,旨在保障原作者和授权方的权益同时给予获授权方合理的使用权限。这对于规范互联网行业的作品转载行为具有重要的指导意义。

    LwIP协议栈源码详解

    整体上,文档对于想深入了解LwIP协议栈源代码的开发者来说,是一个非常宝贵的资源。它不仅可以帮助开发者快速掌握LwIP协议栈的核心概念和工作原理,还能提供实际的编程实例和技巧。开发者可以通过文档中的内容更好地...

    LwIP协议栈源码详解.pdf

    移植综述部分涵盖了如何将LwIP协议栈适配到特定的硬件和操作系统上。这通常包括设置系统接口、中断处理、定时器等。 #### 2. 动态内存管理 动态内存管理在嵌入式系统中至关重要,因为存储空间往往有限。LwIP采用了...

    手机QQ协议、3GQQ协议的SDK、QQ空间协议、webQQ协议

    用户可以自定义发送数据包:public string HttpSendData(string URL, string Method = "GET", string Data = "",string Encode = "UTF-8") 可以自定义设置Referer、UserAgent、代理、获取cookie、带上cookie获取网络...

    路由协议 中文rfc

    【路由协议 中文rfc】中的主要知识点集中在RIP(Routing Information Protocol)版本2的协议分析上。RIP是一种广泛使用的内部网关协议(IGP),适用于小型到中型网络,它基于距离向量路由算法。 1. **协议文档**: ...

    BitTorrent 协议分析与实现

    研究基于 HTTP 的 Tracker 协议,基于 UDP 的 Trackerless 协议,基于 TCP 的 Peer wire 协 议交互的具体内容。使用标准 C 语言编写基于 BitTorrent 协议的 P2P 客户端软件,并且可方 便地在不同处理器平台上编译运行。

    [合同&协议书]签约摄影师协议.doc

    - 宣传与推广:甲方会在自己的宣传平台如杂志上展示乙方身份,并公布摄影师信息。 - 拍摄任务优先权:在需要摄影师参与的项目中,甲方优先考虑签约摄影师。 - 稿酬支付:甲方需按杂志稿费标准支付乙方图片使用...

    讲师合作协议范本精选.doc

    5. 转载乙方原创文章,但同样不得用于商业收入,除非得到乙方书面许可。 三、乙方责任与权益 1. 按照甲方要求进行授课或录制课程。 2. 遵守课程表并尊重甲方的通知。 3. 在接到通知后尽快确认是否能配合。 4. 使用...

    [转载]对STC15系列单片机进行串口ISP下载C语言例程(等于开放了STC下载协议)

    //才能给目标芯片上电,否则目标芯片将无法正确下载 #include "reg51.h" typedef bit BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; //宏、常量定义 #define ...

    最新加入贴吧申请贴吧协议书样本WORD范本模板.docx

    贴吧有权在站内转载用户作品,但尊重原作者的版权,对于商业用途需征得作者同意并标明出处。 第四章,处罚规则,列举了可能导致用户权限被限制或账户被删除的行为,如发表不当言论、进行非法商业活动、模仿管理员ID...

    AJAX、http传输协议、响应状态码、请求方式

    AJAX = Asynchronous ...版权声明:本文为CSDN博主「鹿维恩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/huangwfu/article/details/128907622

Global site tag (gtag.js) - Google Analytics