略说http协议(一:http历史及http基础)

来源:互联网 发布:sql注入 or 1 1 编辑:程序博客网 时间:2024/05/29 18:02

本文章是读《图解http》之后的记录,文章的内容在此书中都可找到

历史

HTTP于1990年诞生,此时的HTTP尚未作为正式的标准建立,这时的HTTP被称为HTTP/0.9.HTTP作为标准被公布是在1996年,其被正式命名为HTTP/1.0。而后1997年公布的HTTP/1.1是目前主流的HTTP协议版本。HTTP至今没有怎么更新,显著用的最多的是是HTTP/1.1.

理解TCP/IP

什么是TCP/IP

我们的网络是运行在TCP/IP协议族的,而HTTP协议是其内部的一个子集,TCP/IP是互联网相关的各类协议族的总称,包括了众多内容,其中包括TCP,IP,DNS,UDP,ICMP等等。

TCP/IP的分层管理

TCP/IP协议族按层次分为四个层次,分别是应用层,传输层,网络层,和数据链路层。下面分别介绍

应用层

应用层决定了想用户提供应用服务时通信的活动,次层中有FTP(文件传输协议),和DNS(域名系统),HTTP等。

传输层

传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

网络层(网络互连层)

网络层用来处理在网络上流动的数据包,数据包是数据传输的最小数据单位,该层规定了通过怎么样的路径到达对方计算机,并将数据包传送给对方。

链路层(数据链路层,网络接口层)

用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动,NIC(网卡),及光纤等物理设备。

TCP/IP通信传输流

图片来源TCP/IP 通信传输流,侵删。

在进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接受层从应用层往上走。

我们模拟一下数据传输的过程,首先作为发送端的客户端在应用层发出一个想看到某个Web页面的HTTP请求。然后传输层把从应用层处收到的数据进行分割,并在各个报文上打上标记序号及端口号转发给网络层。在网络层,增加作为通信目的地的MAC地址后转发给链路层,这样发送端的工作就完成了。接受端的服务器在链路层接受到数据,按序往上层发送,一直到应用层。当传输到应用层,才算真正接受到有客户端发送过来的HTTP请求。

再传输过程中,发送端在进过每层时都必定会打上一个该层所属的首部信息,而接收端在层与层传输数据时,每经过一层时就会把对用的首部去掉。

一个简单的HTTP协议

从我们生活中的经验也可以知道,要建立一个连接,通常是客户端发送请求,而后服务器端响应请求。下面我们看一个实例。
下面陈列一个请求报文和响应报文。

请求报文

POST /form/entry HTTP/1.1Host:google.comConnection:keep-aliveContent-Type:appliaction/x-www-form-urlencodedContent-Length:16name=ueno&age=37
  • 这里的POST是指方法,/form/entry是URL HTTP/1.1是http版本号
  • Host,Connection,Content-Tpye,Content-Length部分是请求首部字段
  • name部分则是内容实体

响应报文

HTTP/1.1 200 OKDate:Thurs,28 Jul 2016 18.06.00 GMTContent-Length:264Content-Type:text/html<html>...
  • HTTP/1.1 是协议版本,200为状态码,ok是状态码的原因短语
  • Date,Content-Length,Content-Tpye是响应首部字段
  • \… 部分则是响应报文主体

通过上面的两个报文可以看出请求报文是由请求方法,请求URL,协议版本,可选的请求首部字段和实际内容组成,而响应报文则有协议版本,状态码,解释状态码的原因短语,可选的响应首部字段以及实体主体构成。尔后很大的篇幅都会用来讲解报文的构成。

HTTP是不保存状态的协议

http是不保留状态的协议,即无状态协议。也就是说http协议自身不对请求和响应之间的通信状态进行保存,在http这个级别,协议对于发送过的请求或响应都不做持久化处理。当有新的请求发送时,就会有对应的新响应产生。协议本省不对之前一切的请求和响应报文进行保存。这样子是为了处理大量事务,确保了协议的可伸缩性,所以才设计的这么简单。

但是无状态也会带来一些弊端,做过网页开发的人应该都知道cookie,cookie就是为了弥补协议的无状态化而出现的,可以参考细说cookie

HTTP方法

前面的请求报文有一个部分是“GET”,这就是http的方法,一般开发者比较熟悉的应该是GET和POST这两个。下面就挨个讲解。

  • GET:用来请求访问已被URL识别的资源。
  • POST:用来传输实体的主体。
  • PUT:用来传输文件。
  • HEAD:和GET方法一样,只不过不返回实体报文。
  • DELETE:用来指定删除文件,与PUT方法相反。
  • OPTION:用来查询针对请求URL指定的资源支持的方法。
  • TRACE:让web服务器端将之前的请求通信还回给客户端的方法。
  • CONNECT:要求的与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

再来说说GET和POST方法的比较:

GET特点:
- 请求可被缓存
- 请求保留在浏览器历史记录中
- 请求不应在处理敏感数据时使用
- 请求有长度限制
- 请求只应当用于取回数据

POST的特点:
- 请求不会被缓存
- 请求不会保留在浏览器历史记录中
- 不能被收藏为书签
- 请求对数据长度没有要求

总的来说,当传递的数据不敏感并且比较小是才可以使用GET方法,GET方法会在链接中使用明文传递信息,可以被别人看到。

建立持久连接

在http协议的初始版本中,每进行一次HTTP通信就会断开一次TCP连接,但是现如今一共同个页面中经常包含很多图片,会多次请求资源,如果每次请求时都会有TCP的建立与断开的话就会增加通信录的开销,所以可以选择建立持久连接。持久连接后,只要没有一方明确提出断开连接,那么连接就会一直保持。在HTTP/1.1中,连接是默认持久连接的。

持久连接建立后就可以使用管线化来发送数据,管线化即指多个消息的发送并行进行,互不干扰,这样就不需要一个一个的等待响应了。

结语

这是http的基础部分,下一次将会记录http报文部分。

0 0