http协议(超文本传输协议)学习笔记

HTTP  HyperText Transfer Protocol  超文本传输协议

HTTP是一个客户端和服务器端请求和应答的标准。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。

HTTP协议属于TCP/IP协议簇。

TCP/IP  Transmission Control Protocol/Internet Protocol  传输控制协议/因特网互联协议(又名网络通讯协议)

TCP/IP按照层次从上至下分为四层:应用层,传输层,网络层,数据链路层。

      1.应用层:应用层决定了向用户提供应用服务时通信的活动。TCP/IP协议簇内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name System,域名系统)服务就是其中两类。HTTP协议也处于该层。

      2.传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。

      3.网络层:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。IP(Internet Protocol,网际协议)位于网络层。

      4.链路层(又名数据链路层,网络接口层):用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。

HTTP协议与其他TCP/IP协议是如何协作的:

      1.客户端输入“http://hackr.jp/xss/Web页面”。

      2.DNS返回hackr.jp对应的IP地址:20X.189.105.112。

      3.HTTP协议  生成针对目标Web服务器的HTTP请求报文:请给我http://hackr.jp/xss页面的资源。

      4.TCP协议  为了方便通信,将HTTP请求报文段按序号分为多个报文段,把每个报文段可靠地传给对方。

      5.IP协议  搜索对方的地址,一边中转一边传送。

      6.TCP协议  从对方那里接收到的报文段,重组到达的报文段,按序号以原来的顺序重组请求报文。

      7.HTTP协议  处理对Web服务器请求的内容。

      8.请求处理的结果也按照相同的TCP/IP通信协议向用户进行回传。

URI  Uniform Resource Identifier  统一资源标识符

URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。标准的URI协议方案有30种左右,由隶属于国际互联网资源管理的非营利社团ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)的IANA(Internet Assigned Numbers Authority,互联网号码分配局)管理颁布。

URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),可见URL是URI的子集。

URL  Uniform Resource Locator  统一资源定位符

相对URL,就是指从浏览器中基本URL处指定的URL,形如/image/logo.gif这种形式。

绝对URL:  http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1

      1.协议方案名:使用http:或https:等协议方案名获取访问资源时要指定协议类型。 不区分字母大小写, 最后附一个冒号(:)。也可使用data:或javascript:这类指定数据或脚本程序的方案名。

      2.登录信息(认证) :指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证) 。 此项是可选项。

      3.服务器地址 :使用绝对URI必须指定待访问的服务器地址。 地址可以是类似baidu.com这种DNS可解析的域名, 或是192.168.1.1这类IPv4地址, 还可以是[0:0:0:0:0:0:0:1]这样用方括号括起来的IPv6地址。

      4.服务器端口号 :指定服务器连接的网络端口号。 此项也是可选项, 若用户省略则自动使用默认端口号。

      5.带层次的文件路径 :指定服务器上的文件路径来定位特指的资源。 这与UNIX系统的文件目录结构相似。

      6.查询字符串 :针对已指定的文件路径内的资源, 可以使用查询字符串传入任意参数。 此项可选。

      7.使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置) 。 但在RFC中并没有明确规定其使用方法。 该项也为可选项。

RFC  Request for Comments  征求修正意见书。一些用来制定HTTP协议技术标准的文档,当然并不是强制性的,所以还是有一小部分应用程序并没有遵从RCF标准,这也就导致了其他应用不同标准的互联网资源可能 就无法与该应用程序进行通讯了。

HTTP协议用于客户端和服务器端之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。在两台计算机之间使用HTTP协议通信时, 在一条通信线路上必定有一端是客户端, 另一端则是服务器端。有时候, 按实际情况, 两台计算机作为客户端和服务器端的角色有可能会互换。 但就仅从一条通信路线来说, 服务器端和客户端的角色是确定的, 而用HTTP协议能够明确区分哪端是客户端, 哪端是服务器端。通过请求和响应的交换达成通信。

HTTP协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。 换句话说, 肯定是先从客户端开始建立通信的, 服务器端在没有接收到请求之前不会发送响应。

      客户端请求:GET / HTTP/1.1

                            Host: hackr.jp

      服务器响应:HTTP/1.1 200 OK

                            Date: Tue, 10 Jul 2012 06:50:15 GMT

                            Content-Length: 362

                            Content-Type: text/html

                            <html>

                            ...

      1.起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。 随后的字符串/index.htm指明了请求访问的资源对象,也叫做请求URI(request-URI) 。 最后的HTTP/1.1, 即HTTP的版本号, 用来提示客户端使用的HTTP协议功能。综合来看, 这段请求内容的意思是: 请求访问某台HTTP服务器上的/index.htm页面资源。

      2.请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

      3.响应报文  HTTP/1.1是协议版本,紧挨着的200 OK表示请求的处理结果的状态码(status code)和原因短语(reason-phrase)。下一行显示了创建响应的日期时间,是首部字段(header field)内的一个属性(GMT)。接着以一空行分隔,之后的内容称为资源实体的主体(entity body)。响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

      HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身 不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。

      使用HTTP协议, 每当有新的请求发送时, 就会有对应的新响应产生。 协议本身并不保留之前一切的请求或响应报文的信息。 这是为了更快地处理大量事务, 确保协议的可伸缩性, 而特意把HTTP协议设计成如此简单的。可是, 随着Web的不断发展, 因无状态而导致业务处理变得棘手的情况增多了。 比如, 用户登录到一家购物网站, 即使他跳转到该站的其他页面后, 也需要能继续保持登录状态。 针对这个实例, 网站为了能够掌握是谁送出的请求, 需要保存用户的状态。HTTP/1.1虽然是无状态协议, 但为了实现期望的保持状态功能, 于是引入了Cookie技术。 有了Cookie再用HTTP协议通信, 就可以管理状态了。

      Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),可以叫做浏览器缓存。

请求URI定位资源

      HTTP协议使用URI定位互联网上的资源。正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。

      当客户端请求访问资源而发送请求时,需要将URI作为请求报文中的请求URI包含在内。

      除此之外,如果不是访问特定资源而量对服务器本身发起请求,可以用一个*来代替请求URI。下面这个例子是查询HTTP服务器端支持的HTTP方法种类。

            OPTIONS  *  http/1.1

告知服务器意图的HTTP方法

      向请求URI指定的资源发送请求报文时,采用称为方法的命令。方法的作用在于,可以指定请求的资源按期望产生某种行为。方法中有GET、POST和HEAD等。

      HTTP/1.0和HTTP/1.1支持的方法(方法名区分大小写,注意要用大写字母):

            方法                    说明                                 支持的HTTP协议版本

            GET                  获取资源                            1.0、1.1

            POST               传输实体主体                     1.0、1.1

            PUT                  传输文件                            1.0、1.1

            HEAD                获得报文首部                    1.0、1.1

            DELETE            删除文件                           1.0、1.1

            OPTIONS          询问支持的方法                1.1

            CONNECT        要求用隧道协议连接代理  1.1

            LINK                  建立和资源之间的联系     1.0

            UNLINE             断开连接关系                   1.0

CONNECT:要求用隧道协议连接代理。

      CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

管线化。

      持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。比如,当请求一个包含10张图片的HTML Web页面,与挨个连接相比,用持久连接可以让请求更快结束。而管线化连接还要快。请求数越多,时间差就越明显。

使用Cookie的状态管理。

      HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一侧面来说,也正是因为HTTP协议本身是非常简单,所以才会被应用在各种场景里。

      保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

编码提升传输速率

      实体(entity):作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。向待发送邮件内增加附件时, 为了使邮件容量变小, 我们会先用 ZIP 压缩文件之后再添加附件发送。 HTTP 协议中有一种被称为内容编码的功能也能进行类似的操作。内容编码指明应用在实体内容上的编码格式, 并保持实体信息原样压缩。 内容编码后的实体由客户端接收并负责解码。

      在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR + LF)”来标记。使用分块传输编码的实体主体会由接收的客户端负责解码, 恢复到编码前的实体主体。HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值