HTTP学习之《图解HTTP》总结

转载请标注:http://blog.csdn.net/friendlychen/article/details/73924568
初学网络方面的知识,肯定与TCP/IP,HTTP等协议的学习分不开,毕竟这些协议是网络组成最重要的基础,相当于交通里面的各种红绿灯,交通标志图标,交通标记线等,规范着行车规则。网络协议就是网络通信的这种规范。对于初学HTTP协议,我推荐《图解HTTP》,虽然我个人不喜欢日本,但是技术是无国界的,相对于西方作者字典式的教科书,每本书都像字典一样,厚的不行,内容还枯燥,啃下来的难度非常大。而这本日本人的著作,用了大量通信图片,全面系统而又生动介绍了HTTP协议的基础知识,特别适合网络初学者。这里我对这本书的大概内容做了简单的总结,把一些重要的知识点梳理了一下。

一、网络基础之TCP/IP与HTTP

了解HTTP,就必须要了解些TCP/IP协议族。其实机器是很笨的,没有任何智商,想让机器之间通信,必须要有一套完整通信规则,包括如何到达通信目标,使用的传输类型,等等都需要一套规范,这一整套规范就是协议。TCP/IP协议就是其中的这么一套协议族。

TCP/IP 协议的四层分层管理

1、应用层,具体的协议有,HTTP,FTP(文件传输协议),DNS(域名系统,就是IP与域名互相转换)等。从这里可以看出HTTP协议是TCP/IP协议族的组成部分。
2、传输层,TCP(面向连接的,传输控制协议),UDP(面向无连接的,用户数据报协议)。
3、网络层,IP协议。
4、数据链路层,处理网络的硬件部分,比如,网卡,通信线路(光纤,电缆)。
HTTP学习之《图解HTTP》总结_第1张图片
如图所示的,这是整个通信过程中数据流的走向,同时经过每层协议时,都会加上相应的首部,每个首部都会有相应的功能。
各个分层之间相互协作,当一个部分出现问题,可以找到相应的层次来处理问题,而不是把整个协议都去检查一遍。
从上图也可以看出,HTTP协议作为TCP/IP协议族应用层的重要成员,在通信过程中起着非常重要的角色。

二、简单的HTTP协议

HTTP协议一般是用户客户端和服务器之间的通信,一般都是客户端请求,服务端响应,类似于一问一答式的通信。
HTTP学习之《图解HTTP》总结_第2张图片
就问你,这张图是不是好丑。哈哈,好吧,图虽然丑了点,但是不影响这表达的意思嘛,就是在两台机器通信时使用HTTP协议中,肯定有一方是客户端,一方是服务器。
HTTP学习之《图解HTTP》总结_第3张图片
这就是HTTP通信最基本的格式了,从1中发送请求,从2中返回响应。请求的格式是:

GET /index.htm HTTP/1.1
Host: baidu.com

这个起始行中的GET表示的是访问服务器的类型,成为请求方法,随后的字符串/index.htm指明了请求访问的资源对象,也叫请求URI,最后的HTTP/1.1表示HTTP的版本号,也是提示客户端使用的HTTP协议功能。
请求报文是由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成。
HTTP学习之《图解HTTP》总结_第4张图片

HTTP学习之《图解HTTP》总结_第5张图片

HTTP是无状态的协议

就是在通信过程中,HTTP协议本身不对庆祝和响应的通信状态进行保存。
当新的请求发送时,并不知道上次是否已经发送类似的请求。举个例子,就是当我们登陆到一个购物网站时,当跳转到其他页面时,发出的请求也应该是保持登陆的状态才能有好的购物体验,不可能说每打开一个页面再登陆一次,这样肯定很麻烦。为了实现这种保持状态的功能,引入了Cookie功能。具体做法是在服务端引入Session功能,在服务端用Session来管理状态,生成SessionID,传给客户端,客户端将SessionID保存在Cookie中,每次请求时在Cookie中取出SessionID放入到HTTP请求中,这样服务器通过SessionID知道你以前的请求状态,是否登录过等信息。

HTTP请求方法

GET,POST,HEAD,OPTIONS,PUT,DELETE等。
GET:一般是获取资源。
POST:一般是传输实体主题,主要目的是将信息告诉服务器。
HEAD:获取报文的首部,一般不返回报文主题,确认资源URI是否有效
OPTIONS:查询针对请求URI指定的资源支持的方法。
PUT:上传文件。一般很少用。
DELETE : 删除资源,一般很少用。

三、HTTP首部

HTTP协议请求和响应报文中包含了HTTP首部,HTTP首部字段是构成HTTP报文中的要素之一,HTTP首部为我们提供了客户端和服务器通信时很重要的通信信息。

HTTP请求报文

请求报文中,HTTP报文有方法,URI,HTTP版本,HTTP首部字段等构成。
HTTP学习之《图解HTTP》总结_第6张图片

HTTP响应报文

响应报文中,HTTP报文由HTTP版本,状态码,HTTP首部字段构成。
HTTP学习之《图解HTTP》总结_第7张图片
HTTP首部字段结构:
首部字段名:字段值
例如:

Host:baidu.com
Cache-Control: max-age = 0
Content - Type: text/html

有的字段值可以是多个值,例如:

Keep-Alive: timeout = 15,max = 100

HTTP首部字段从上面两幅图可以看出共有4种类型。

通用首部字段

HTTP学习之《图解HTTP》总结_第8张图片

请求首部字段

HTTP学习之《图解HTTP》总结_第9张图片

响应首部字段

HTTP学习之《图解HTTP》总结_第10张图片

实体首部资源

HTTP学习之《图解HTTP》总结_第11张图片
上面4种类型都对应了好多首部字段,具体每个用法就不再具体展开细说了。
还有一些并不是HTTP协议本身的字段,但是很有用,也需要了解。比如为Cookie服务的首部字段,有Set-Cookie(响应首部字段) 和Cookie(请求首部字段),这是管理服务器和客户端之间状态的信息,它的工作机制是用户识别和状态管理。

四、HTTP状态码

响应报文中HTTP状态码表示了客户端HTTP请求的返回结果,得到响应的结果码,有助于了解我们请求时是否成功,如果错误了,是哪种类型的错误。状态码有5种类型,分别表示了对应的返回响应原因。
HTTP学习之《图解HTTP》总结_第12张图片
1、2XX表示响应结果为请求被正常处理
200 OK
表示客户端发来的请求在服务端被正常处理。
204 NO Content
表示处理成功,但是响应中没有任何实体。
206 Partial Content
表示客户端进行了范围七牛,而服务器成功执行了这部分的请求。

2、3XX,表示浏览器需要执行某些特殊的处理以正确处理请求。
301 Moved Permanently
永久性重定向,表示该资源已经分配了新的URI,原来URI不再使用。
302 Found
临时性重定向,跟301类似,也是请求的资源分配了新的URI,但只是临时的,以后可能会换回来。
304 Not Modified
表示服务器允许请求访问资源,但是没有满足条件。比如你客户端需要请求一个信息,但是要求该信息是今天编辑的,但是资源里确实有该信息,只是这个信息是昨天编辑的,不符合条件,则服务器返回该状态码。

3、4XX,表示客户端是发生错误的原因所在
400 Bad Request
表示请求报文中存在语法错误。
401 Unauthorized
没有认证,表示发送的请求组要进行HTTP认证。
403 Forbidden
表示不允许访问这个资源。
404 Not Found
表示服务器无法找到请求的资源。

4、5XX 表示服务器本身发生错误。
500 Internal Server Error
表示服务器在执行时发生错误。
503 Service unavailable
表示服务器暂时处于超负荷或者正在停机维护,无法处理请求。

五、HTTP与HTTPS

HTTP协议虽然有相当优秀的一面,但是也并非没有缺点,因为设计很简单,没有考虑到安全方面的问题。HTTP协议有以下不足:
1、通信使用明文(不加密),内容可能会被窃听
在通信过程中,由于设备的公开性,不能保证所有环节都是安全的,因此,很有可能会被窃听,因此加密就成了通信过程中必不可少的环节。
2、不验证通信方的身份,因此可能遭遇伪装。
HTTP协议中的请求和响应是不需要验证通信方进行确认,因此任何人都可以伪装,无法辨别是否是真实的通信方。
3、无法验证报文的完整性,所以有可能篡改。
虽然在验证完整性上面有MD5等信息摘要技术,可以将信息和MD5的信息摘要码同时传递过去,但是通信过程中,这两项都有可能被同时更改,因此还是无法保证信息的完整性。
简单概括成,不加密,无法认证,没有完整性保护。鉴于HTTP的不安全性,于是就用了HTTP+加密+认证+完整性保护来处理这些问题,这就是HTTPS。
HTTP学习之《图解HTTP》总结_第13张图片
相信在上网过程中,会经常接触到这个https开头的网页,网址的前面还有个加锁图标,并且写着安全两个字。为什么有的网址是http开头,有的是https开头呢?为什么会有http和https的区别呢?为什么https开头的会提示安全两个字呢?这就是https的强大之处啦。
HTTPS不是新的协议,而是在HTTP协议的接口部分用了SSL和TLS协议代替了。HTTPS与HTTP在TCP/IP协议族的位置如下
HTTP学习之《图解HTTP》总结_第14张图片
既然HTTPS具有加密功能,这里先来讲点加密方法
加密最基本的目的是两个人交流不想让第三个人知道其中的内容,加密是先有一套规则,然后在这套规则的基础上进行交流。现代加密方法中的加密算法(加密规则)一般是公开的,而加密会涉及到密钥,密钥用来加密和解密,因此密钥一般是保密的。根据密钥的不同分成把加密分成两种加密方式,一种是对称密钥加密,一种是非对称加密
对称密钥加密意思就是加密和解密时密钥是一样的,在通信过程中,如何做好密钥不被窃听就显得很重要。而非对称加密的加密密钥和解密密钥是不一样的。通信中,用其中用加密密钥(又称公开密钥)加密信息,这个加密密钥大家都可以知道,当把信息传给我时,只有我知道解密密钥(又称私有密钥)可以解密信息。没有这个解密密钥,而只有加密密钥,想解开密文是极其困难的。

HTTPS是采用混合加密机制的

非对称加密虽然更加安全,但是加解密的时候比较复杂,一般只能用于信息量比较小的数据中,随着数据量的加大,加解密会占有更多的时间和内存。对称加密虽然在保存密钥上比较麻烦,但是处理速度比较快,适合大量数据的加密,因此利用可以利用两者各自的优势。
HTTPS在通信开始建立时使用非对称加密来进行对称加密密钥的交换,在数据通信时使用对称加密,可以提高数据传输的效率。
非对称加密的公开密钥还有一个问题,就是无法证明这个公开密钥就是真实的公开密钥。这里就相当于引入了第三方来证明我的公开密钥是正确的。这里的第三方就是数字证书认证机构(CA),这样的机构一般都是社会信用度极高的第三方机构。

证明服务器是合法的
一般服务器向第三方机构去申请证书,第三方机构先去验证这个服务器是否合法,验证完后向该服务器颁发证书,证书里有对申请的公开密钥做数字签名。客户端请求时,服务器会想客户端发送数字证书,客户端接受到证书可以对数字签名进行验证,通过之后,则服务器的公开密钥是值得信赖的。
证明客户端是合法的
上述对服务器的验证也可以用于客户端的验证,比如我们之前用过的网银什么的,有一个类似于U盘大小的东西插在电脑中,其实就是相当于客户端的证书。毕竟除了金融和保密性强的一些单位,很少会去申请客户端的证书,毕竟申请证书还是需要一大笔费用的。

当然了,HTTPS既然有这么多的优点,为什么不全部都是用HTTPS呢,事物都有两面性。确实优点不少,也有部分的缺点啦。
一是在不断的加密解密过程中需要消耗大量的内存和CPU等硬件资源。因此比一般的HTTP请求要慢2到100倍。
二是购买证书是需要花一大笔费用的,对BAT等那些财大气粗的当然不在乎这点钱啦,对一般的小企业还是需要考虑一下的,一年费用在几千到几十万不等。

以上就是《图解HTTP》的总结,当然哪里写的不太好的话,欢迎各位提意见和建议,谢谢啦。大家也可以去看看这本书,确实写的不错,里面还有大量的内容我没有进行总结了,这里总结的大部分都是常用的知识。

你可能感兴趣的:(http)