HTTP协议基础及发展历史(一)

一、什么是HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,HTTP是HyperText Transfer Protocol的缩写,也称为超文本传输协议,基于TCP/IP通信协议来传递数据,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器,最初的版本只能用来传输html文件,现在则可以传输包括文字、图像、视频和二进制文件的所有内容。

二、HTTP协议发展

三、HTTP协议的特点

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
4、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S和C/S模式。

四、HTTP的工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:
1、首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2、建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3、服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4、客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5、释放 TCP连接;

6、浏览器将该 html 文本并显示内容;

HTTP三次握手

客户端向服务端发送请求(第一次握手),服务端分配一个端口给client,并且将ACK修改为X+1,请求Seq为Y(第二次握手),当服务端收到该请求的时候,返回给server端ACK为Y+1,同时将处理的请求修改为Z(第三次握手)。

第一次握手: 客户端什么都不确定。服务端确认对方发送正常。

第二次握手: 客户端发送/接受正常,对方发送接收正常。服务端确认自己发送正常,客户端发送正常。

第三次握手: 客户端发送/接受正常,服务端发送接受正常。服务端确认自己发送/接受正常,客户端发送接受正常。

为什么需要三次握手

三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。

为了保证服务端能收接受到客户端的信息,并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息 并能做出正确的应答而进行后两次(第二次和第三次)握手。

举个生活中打电话的例子:
  1. 老机(客户端)打给新机(服务器):喂 , 能听到了吗?
  2. 新机回复老机:听到了, 你听到了吗?
  3. 老机:听到了听到了…

总之不管多少次握手,总会有一方不知道对方已经知道。因此为了传输效率,只要3次握手就认为已经可以开始传输数据,三次握手之后,CLIENT和SERVER就进入ESTABLISHED状态,开始数据传输。

五、HTTP请求方法

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET、POST、PUT和DELETE, 一个URL地址用于描述一个网络上的资源,而HTTP中的GET、POST、PUT、DELETE就对应着对这个资源的查,改,增,删4个操作。我们最常见的就是GET和POST了,下面我们看看GET和POST的区别。

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如getList.php?game=4156&code=1;POST方法是把提交的数据放在HTTP包的Body中。
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
0 人推荐

声明:本文原创发布于加藤非博客,转载请注明出处:加藤非博客 jiatengfei.com 。如有侵权,请联系本站删除。

加藤非博客
请先登录再发表评论
  • 最新评论

  • 总共0条评论