692-详解HTTP和HTTPS协议

Posted -林泽宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了692-详解HTTP和HTTPS协议相关的知识,希望对你有一定的参考价值。

HTTP协议简介

HTTP是请求应答式协议:客户端发给请求的消息是请求消息,服务器返回给客户端的是响应消息,请求消息和响应消息是成对的
服务器不会主动发消息给客户端,请求消息都是客户端发给服务器,服务器都是被动响应的。

tcp建立的是一条传输的通道,通道上传输的内容是由http协议定义的

我们举个例子:




网址的第一部分是http或者https协议名
第二部分是命名
第三部分是请求部分的页面的相对地址
我们输入域名,客户端会把域名信息发送给DNS服务器解析,对域名解析出对应的IP地址,返回给客户端,客户端拿到IP之后,向IP所在的服务器请求,请求服务器把页面的资源信息返回给客户端。

HTTP协议的特点


长连接的报文的头部表示:

意味着请求和响应处理完之后,TCP通道不需要关闭。

短连接的报文的头部表示:
connection close
表示请求得到响应后,就关闭TCP的通道

无状态:http不知道当前的请求和之前的请求是来自同一个客户端的

现在,我们访问的基本都是动态的网页,有交互性,后面的请求对前面的请求有依赖性, http协议在1.0 1.1版本后,服务器响应的时候会添加一个session信息,客户端的下一次请求会把session信息加上,发给服务器。

HTTP协议的消息结构


我们登录一个页面,看看登录的请求消息结构:

上图中蓝色的部分是请求头(header)

因为刚才请求的是登录的信息,账户密码之间是通过&区分的

我们现在看看响应的消息结构:

响应的头部信息如下:

然后是空行,然后就是实体:服务器返回html页面的内容:


为什么上图显示的是这样,是因为图片和其他资源是根据其他的请求来去获取的。

举个例子:我们客户端在浏览器输入的只是一个网址,但是实际上背后和服务器之间,一个页面是有多少个请求,是取决于这个页面上有多少个资源,一个页面很有可能是多个资源:图片的资源,html文件,CSS格式,文本,程序处理结果,它们各自都需要一个请求和响应。
客户端会把多次服务器响应的结果合在一起显示出来,所以我们看到的是完整的页面

HTTP各个版本演变过程








HTTP协议请求方法


第一部分的POST是请求的方法
每一个部分之间用空格隔开
第二部分是URL的地址:(统一资源定位:请求的这个资源,页面,图片,是在服务器上的哪个位置)

第三部分是:HTTP请求和版本

请求方法:

打开首页:用的是GET方法:

HEAD:


响应的只有头部信息,没有body响应体信息了。
PUT:更新。客户端向服务器指定位置更新内容

DELETE:客户端请求服务器删除掉我URL所标识的资源,比如说删除服务器某个位置的图片。但是这个方法存在不安全性,会被有的站点禁用。


没有权限删除服务器上的图片,这个方法被禁用了。

TRACE:测试诊断
CONNECT:把串行的形式改成管道或者代理服务器的方式。在1.1版本后开始的,比如说,一个长连接,有很多请求过去,是串行的,第一个请求没有处理完,第二个请求是没有办法发出去的,如果是改成管道的方式,那么第一个请求没处理完,其他请求也可以过去。

OPTIONS:可以去查这个URL资源在服务器上是支持哪些方法

GET和POST的区别:

1、功能不一样
GET方法是:客户端从服务器某个位置获取资源数据,比如说打开首页,获取首页的资源到客户端。
POST方法是:客户端提交数据给服务器。比如说,登录,注册,提交表单数据给服务器。
2、参数
GET方法的参数是放在URL地址中的:

登录也可以使用PUT方法:实现的时候参数在URL中的:

POST方法的参数在报文中的body部分传过去的:

POST方法的安全性更高,不通过抓包工具是看不到的,而且可以加密的
GET方法:参数是用户可见的,安全性较低

3、传送的数据量
GET请求传送的数据量比较小:不超过2KB
POST请求传送的数据量比较大:原则上没有限制,和web服务器的版本有关系。IF4的最大限制数据大小是80KB,IF5的最大限制请求数据的大小是100KB

HTTP协议常见请求首部字段


请求头可以包含很多信息:

这部分往往是通过客户端header告诉服务器我客户端的情况

我们现在访问百度:

Host变成是域名了。

服务器想知道当前请求和之前的请求有没有关系,可以发送Cookie给客户端,客户端可以把这个信息加到请求消息中,服务器就可以进行判断了
http本身不加密,我们通过自己的应用程序的手段去加密

HTTP协议响应状态码


响应头:补充响应的附加的信息,包括服务器的信息,服务器对客户端的附加要求。

我们来抓包看看:


第一行是状态行,包括很多部分,以空格隔开。
HTTP/1.1是协议的版本号
200是状态码
OK是状态描述


蓝色部分是响应头
然后是空行
然后是响应报文的内容(页面返回信息)。

响应的状态码:

范围是:100-599
200只是代表客户端的请求处理成功,不代表服务器对业务逻辑的处理是成功的。
比如说,登录业务,登录是成功还是失败,服务器是不管的,都是返回200,不管输入密码成功还是错误。

204:没有实体部分的返回,或者是不允许返回实体部分的信息。客户端的页面不会变更,还是跟原来的一样。
206:返回的部分的请求,客户端在请求的时候在头部信息加请求的范围,从多少字节到多少字节,服务器返回的结果就是206,返回的是客户端指定要求的信息,并不是返回所有内容。

3xx:客户端请求的资源很有可能存放的位置变更了,资源和URL地址变更了,要重新定位到另外一个地方:301:客户端请求的资源信息是永久的变更到那个地方了,比如说,客户端是做标签,存的是以前的URL信息,301的响应,客户端会把新的URL信息给到这里:

把请求的head部分去掉

也可以处理,但是请求的页面信息存了301
用了新的地址替换了原来的地址:

加了个/
可以识别出来新的地址是什么,返回301的错误,用新的地址替换原来的地址,而且这个新的地址还是永久性的,这个是目前存放资源的地址。永久性的重定向。

临时性的重定向:


客户端目前请求的资源只是临时改变位置,以后还有可能变回原来的URL地址,客户端如果做了标签,临时重定向是不需要改标签的。

4XX:客户端引起的错误,客户端输错了地址,返回4XX,
如果客户端本身没有权限去请求服务器的资源,要请求资源,更新资源,获取资源,没有权限,也是返回4XX
400:客户端的请求出现语法错误
403:客户端请求资源的访问是被服务器拒绝了,服务器不允许你访问,不需要给出详细的理由,服务器也可以在实体说明原因。
404:客户端输错了资源的地址

请求打开一个页面,但是没有这个页面,服务器找不到这个资源信息,返回404

5XX:服务器引起的错误。服务器没有实现客户端的请求造成的
500:服务器内部发生了不可预知的错误,或者服务器程序本身有bug
502:连接错误,有可能是服务器的服务关闭了,或者是服务器没有打开或者在维护
503:服务没有办法提供给你

502:


状态码被表示的并不是完全真实的,有时候可以去自定义的,程序可以决定按什么状态码处理。

HTTP协议常见响应首部字段


响应头:附加信息,服务器的信息,服务器对客户端的附加要求


location:表示请求的资源的新的URL地址,一般和3XX一起的。
1.1版本默认的是长连接。

HTTP协议的数据是不加密的


我们通过抓包,在请求报头就可以看到账户密码,都是明文传输,安全隐患大

HTTPS协议



https协议,会带一把锁的信息

HTTPS:通过SSL协议来传输的HTTP协议

SSL协议(安全套接字协议,为网络通信提供安全,数据完整性的协议)是怎么实现安全性的?
SSL协议属于应用层的协议,在传输层还是走的是TCP协议。


安全隐患:信的内容被第三方看到,信也有可能被掉包,被篡改,接收人是其他人冒充。
加密是可以防止信息泄漏,别人即使截获了,也看不到信息内容,不知道明文是什么。
解决方法:每个接收人持有合法的证书才可以。和收邮件要出示身份证一样。
完整性保护也是通过加密来实现的。

加密:对称加密和非对称加密
SSL是对称加密+非对称加密

此处关于对称加密和非对称加密可以看我的另外一篇博客:《数据明文传输的安全问题》
对称加密:(加密的密钥和解密的密钥是同一个)

HTTPS在传输数据的时候采用的是对称加密算的。
但是接收端和发送端都需要知道算法和密钥,算法好知道,但是密钥在网络传输中是会被第三方截获,就可以对你的密文解密了。
所以密钥的传输在HTTPS协议中采用的是非对称加密算法。

非对称加密:
安全性非常高,但是比较复杂,操作繁杂,效率低。

加密:121x91=11011
解密:11011x11=121121 取前面一半的数字就是明文。
这样,加密和解密的算法不是互为幂函数,加密的密钥和解密的密钥不是一样的,叫做非对称加密。
加密的密钥事先已经存在于服务端,然后客户端的代码上添加生成相应的加密的密钥的代码,客户端编译运行时自动生成对应的非对称密钥

非对称加密:解密的密钥是私钥,加密的密钥是公钥,公钥是开放给用户的,可以公用的。

HTTPS在传输对称加密的密钥的时候,使用非对对称加密对对称密钥加密,进行传输。既确保了安全性又保证了高效性。

HTTP和HTTPS的区别总结

正是因为HTTPS的效率和性能比HTTP低很多,而且HTTPS生成证书的时候是需要成本的,所以,很多站点:并不是说所有的数据传输都是用HTTPS协议,往往是HTTPS和HTTP相结合,对于敏感的数据的传输使用HTTPS协议,对于非敏感的数据的传输使用HTTP协议!

以上是关于692-详解HTTP和HTTPS协议的主要内容,如果未能解决你的问题,请参考以下文章

网络协议-HTTP协议详解-HTTPS

网络协议-HTTP协议详解-HTTPS

Https协议详解

HTTPS协议详解:HTTPS基础知识

计算机网络HTTP协议详解(十三):安全的HTTPS

详解https是如何确保系统安全的