1. HTTP协议简介

  HTTP协议,俗称超文本传输协议,是一种用于分布式、协作式的超媒体信息系统的应用层协议,是万维网的数据通信的基础。目前存在着HTTP1.0、HTTP1.1和HTTP2.0。

  HTTP1.0的特点:

    1. 一次TCP连接只能处理一个请求,响应结束,连接立即关闭,长连接需要手动设置keep-alive参数来建立;

    2. 不支持发送header信息,造成浪费带宽的现象,并且不支持断点续传功能;

    3. 不存在host域,在1.0中认为每台服务器都绑定一个唯一的IP地址。

    3. 判断缓存的标准只有if-Modified-Since和Expires,太单一。

  HTTP1.1的特点:

    1. 支持长连接,默认开启keep-alive,即连接不会立即断开,而是在指定的时间内没有请求或响应时才会断开,一个TCP连接可以传送多个HTTP请求和响应。

    2. 支持发送header信息,如果服务器确认客户端有权限请求,则开始发送body体,否则不需要发送body,一定程度上节约了带宽。

    3. 存在host域,即服务器上可以存在多个虚拟主机,他们共享一个IP地址,客户端请求的时候必须带上host域。

    4. 缓存处理标准更多,1.1引入Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

    5. 新增了24个错误状态响应码,更加利于错误通知的管理。

  HTTP2.0的特点:

    1. 多路复用,可以在同一个TCP连接并发处理多个请求,相比1.1创建多TCP来处理并发请求的方法,节约了创建TCP连接的成本开销;

    2. 头部数据压缩,2.0使用HPACK算法对header的数据进行压缩,数据体积小,传输速度更快; 

    3. 服务器推送资源,在1.1中只有客户端发送请求,服务器才会进行响应,不存在服务器没有收到请求而去自动发送响应,这种机制有时候会造成很大的延迟,2.0引入server push,它允许服务器在浏览器请求之前推送资源给浏览器,这样客户端就可以直接从本地加载资源,更加快速。

 

2. HTTP协议概述

  HTTP是客户端到服务端请求和响应的标准。客户端通过使用浏览器、网络爬虫或者其他工具,向服务器发起一个HTTP请求(请求报文中包括请求的方法、URL、版本协议、请求头部和请求数据),然后TCP进行三次握手来创建连接,服务器监听到客户端发送过来的请求,给客户端返回一个响应(响应中包括协议版本、响应状态、服务器信息、响应头部和响应数据)。

 

3. HTTP的工作原理

  1. 浏览器通过URL域名向服务器发送一个请求,请求中包含请求行、请求头部、空行和请求数据四个部分;

  2. 在应用层中首先通过DNS协议解析域名,获取对应的IP地址;

  3. 解析出IP地址后,根据IP和服务器默认端口号80,由传输层的TCP协议向服务器发出三次握手,建立连接;

  4. 服务器监听到浏览器的请求后,做出响应,并发请求的资源发送给浏览器;

  5. 响应结束,释放TCP连接;

  6. 浏览器接收数据并进行相应操作。

 

4. HTTP的特点:

  1. 无状态保存

    HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。即每一次连接都是新的,和上一次连接没有任何关联。因为请求—响应机制,没发生一次请求,就伴随着一次响应,为了更大效率的处理大量事务(一次HTTP请求过程称为事务),HTTP协议本身不保留之前一切的请求或响应报文的信息。但是随着互联网业务不断发展,很多场景需要保存浏览器的状态,HTTP1.1于是引入了Cookie技术,浏览器可以通过Cookie来管理状态,但是它还是属于无状态协议。

  2. 无连接

    无连接的含义是每次连接只能处理一个请求,服务收到请求并做出响应后,连接自动断开。这种方式的好处是每次完成请求后,服务器和客户端的连接就断开了,可以提高并发性能。无连接分为两种方式:一种是1.0版本时候的服务器响应请求之后,连接就直接断开了;另一种是1.1版本他们之间的连接并不是直接断开,而是等个几秒钟,在这时间内,如果客户端有后续的请求,则在原来的连接通道继续来收发消息,如果客户端没有发送新的请求,则连接断开,这样的好处是减少了短时间内建立连接的次数,提高了效率,因为TCP建立连接也是需要耗时的。

原文地址:http://www.cnblogs.com/chf333/p/16834471.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性