前言通常都是废话,可跳过。。。总结千万要看,有惊喜哟!!!
在刷面试题的时候,咱们老是能看到与http相关的内容,没有学过计算机网络的人在进行学习的时候可能会以为知识点比较零散难以记住(好比说我),为何会难以记住呢,就是由于咱们的知识体系不够系统,若是咱们知道知识之间的联系,就很容易将相关的知识记住了。最近看了一本在http方面比较好的一本入门书籍--《图解HTTP》,想就里面的知识进行总结,因此就有了今天的这篇文章。html
今天这篇文章我准备分两部分讲,一部分是基础知识点,一部分是总结面试常问到的内容,是基础知识点是用大纲的形式进行展现,细节上不会阐述不少,重点放在面试题上,下面咱们就开始吧~web
在计算机刚开始流行的时候,通常都是一人一机,每一个机器并无通讯。WWW(也就是如今的web)为了让全世界的研究者知识共享,就提出了三项技术,分别是http,html,url。其中http就是控制客户端和服务端之间通讯的协议(协议就像是咱们平时交流的语言,只有语言相通,才能够交流)面试
HTTP和TCP/IP协议的关系数据库
HTTP协议的通讯过程简单来讲就是请求和响应的过程,客户端发送请求,服务端接收请求并做出响应。复杂点儿说,就是基于TCP/IP协议进行通讯,这里须要分清楚TCP/IP协议与TCP协议以及IP协议之间的区别,乍一看,咱们会误认为编程
TCP/IP协议 = TCP协议 + IP协议
这样理解有些片面,其实TCP/IP是一个协议族,是互联网相关的各种协议族的总称,它包含了咱们常见的协议:HTTP协议,TCP协议,IP协议等。segmentfault
ps:这个地方我翻了好几本书,《图解HTTP》中说,两种理解均可以;可是在《图解TCP/IP》中和谢希仁的《计算机网络教程》中都只是说TCP/IP协议是一个协议族。缓存
那么HTTP协议和TCP协议以及IP协议有什么关系呢,看下面这张图就知道了:安全
这张图只是很简单的说明一下TCP/IP的分层结构,咱们只须要知道HTTP,TCP,IP分别位于应用层,传输层和网络层,而且信息在发送和解析的过程是这样的:(图片来自《图解HTTP》)性能优化
能够理解成发送的过程就是不断的添加首部,也就是设置信息(后面会讲),而接收解析的过程就像是剥洋葱同样将首部一层一层的去掉,最后获得HTTP数据。服务器
TCP三次握手与四次挥手
TCCP的三次握手指的是客户端和服务器的链接与断开的过程,三次握手和四次挥手的简单版本以下面这张图所示:(图片来自《图解TCP/IP》)
在整个通讯的过程当中至少须要来回发送7个包才能完成。
前面两点很好理解,解释一下后面两点。无链接指的是每次链接只处理一个请求,服务器在处理完请求并收到应答后会断开链接;无状态是指服务器对传递的内容没有记忆
报文
HTTP报文分为如下两种
报文的具体划分又是这样的(不少详细内容没有讲,能够去参考别的资料进行学习):
方法
通常在请求报文中都会将请求方法放在请求行的第一个,比较常见的方法有如下几种:
状态码
http状态码是在响应报文中出现的,表示这次响应的状态,大体可划分为
2XX:请求接收成功,而且服务端已经进行处理
3XX:重定向,即URL发生了改变
4XX:请求发生了错误
持久链接
前面咱们在说HTTP特色的时候说过, HTTP是一种无链接,无状态的协议。而TCP是有状态的长链接,为何HTTP是基于TCP,但HTTP倒是无链接?
由于HTTP每次请求完成后就会关闭TCP协议,可是咱们能够经过编程本身控制TCP的关闭时间。因为每次请求都要链接TCP协议,效率很低,因此从HTTP/1.1事后,就开启了一个keep-Alive来保持链接,可是这个链接也是有时间限制的,不一样的服务器有不一样的处理,本身也能够设置。
管线化
之前请求和响应模式基本是这样的:
请求1 -> 响应1 -> 请求2 -> 响应2 。。。
有了管线化事后请求和响应模式就变成了这样:
请求1 -> 请求2 -> 响应1 -> 响应2 。。。
也就是说,如今能够先一次进行不少次请求,而不是像之前那样,只有上一次的响应成功后才能够下一次请求,这样大大的提升了效率。
以前咱们说过,HTTP是无状态的,这样每次跳转到新页面时,都须要从新登陆一次,麻烦又浪费时间。因此就诞生了cookie,cookie是进行状态管理的,里面会存放以前登陆的信息。实现原理是客户端第一次发送请求后,服务端响应时会在响应头中添加一个set-cookie信息,要求客户端保存cookie信息,客户端在下次请求时,会将这个cookie信息自动发送给服务端,服务端接收后就会根据cookie信息进行匹配。
随着WEB信息量愈来愈大,HTTP的性能优化也变得愈来愈重要了,其中AJAX就是为了解决HTTP每次发送请求都会更新整个页面的问题,有的时候只是改变了一点点,甚至是可有可无的东西时都会发生整个页面的更新,这样会形成很大的浪费。因此出现了AJAX,AJAX是一个异步刷新技术,其核心在于XMLHttpRequest,若是不了解AJAX的能够看看我以前的这篇文章。
咱们会发现不管怎么改,服务器都是处于被动状态,只能接受客户端的请求,这样客户端只有经过常常发送请求来确认是否有数据更新,可是大多数时候都是没有数据更新的,这样会形成很大的浪费,因此就产生了webSocket协议,这个协议就是为了改变服务器的被动状态,使用这个协议后,服务端能够主动给客户端发送信息,这样就意味着客户端只须要一次请求,就能够保证数据的实时更新,而不是像以前那样定时发送AJAX请求的来实现定时更新,能够看看下图帮助理解(来自菜鸟教程):
其实HTTPS不是一个新的协议,只是在HTTP和TCP之间添加了一层SSL协议,上面诞生的新技术是为了提升HTTP通讯的性能,而HTTPS是为了提升通讯过程当中的安全性:
HTTP + 加密 + 认证 + 完整性保护 = HTTPS(引自《图解HTTP》)
这里只是说明一下有这个新技术,具体能够看这篇文章。
因为这篇文章自己就比较长,惧怕有些初学者看到会直接关闭,因此我将面试题放在了另一篇文章,你们请移步这里。
这篇文章还有好多知识点没有总结,只是列了一个很粗糙的大纲,把常常容易问到的内容详细说了一下,仍是推荐你们看书来学习,若是你是对HTTP一无所知,推荐你看《图解HTTP》,这本书比较适合初学者;若是是对HTTP有必定的了解,想系统的进行学习的话,推荐你看《HTTP权威指南》,这本书讲得很是细,并且书里面结构的分布特别好,强烈推荐!