目录
HTTP协议
什么是HTTP协议?
HTTP协议是客户端和服务器进行交互的一种通讯的格式。实际上就是客户端发送请求,服务端进行响应。
网络传输都需要使用同样的协议,双方约定好统一的规范(封装和解析的数据格式规范)。
协议:就是双方约定好的数据格式,让双方都能看懂。
HTTP协议的特点
- http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输翰任意类型的数据对象,正在传的类型由Content-Type加以标记
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,,即断开连接,,采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致毎次连接传送的数据量增大。另一方面在服务器不需要先前信息时它的应答就较快。
HTTP的长连接和短连接
HTTP1.1 默认保持长连接(HTTP persistent connection),数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。
从 HTTP/1.1 起,默认使用的是长连接, 用以保持连接特性。
HTTP/1.0 与 HTTP/1.1的区别
HTTP协议有HTTP/1.0版本和HTTP/1.1版本。
HTTP/1.0默认是短连接,每次与服务器交互,都需要新开一个连接。
HTTP/1.1
- 默认持久连接。只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求。
- 断点续传。利用HTTP消息头使用分块传输编码,将实体主体分块传输。
HTTP协议格式
HTTP头信息
Content-type:数据类型(text/html等)消息体的格式,告诉对方该使用什么方式解析
Content-Length :Body(消息体)的长度;
Host:客户端告知服务器,所要请求的资源在哪个主机的哪个端口上;
User-Agent:声明用户的浏览器的版本信息;
referer:当前页面是从哪个页面跳转过来的;(防盗链)
location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问;
Cookie:在客户端存储少量信息,通常用于实现会话(session)的功能;
HTTP请求方法
http 1.0,三种:post,get,head
http 1.1,八种:post,get,head,options,put,delete,trace,connect
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
-
GET - 从指定的资源请求数据。
-
POST - 向指定的资源提交要被处理的数据
GET和POST的区别:
参考文章:浅析http中get和post的区别
-
get的请求数据只能放在URL中,post的数据可以放在URL和请求体中
-
URL长度有限制,所以get方法请求数据不能太多,URL只能传输ASCII字符,请求体不做限制
-
从安全性来讲:post可以存放请求数据在请求体中,相对来说更安全(不容易查看);
Http状态码
经常使用的状态码总结:
常见的HTTP工具
抓包工具:fidder,charles,以及浏览器自带的开发者工具
HTTP请求模拟的工具:postman
Http中重定向和请求转发的区别
本质区别:转发是服务器的行为,重定向是客户端行为
重定向的特点:两次请求,浏览器地址发生变化,可以访问自己web之外的资源,传输的数据会丢失
转发的特点:一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。
怎么解决HTTP协议无状态?
无状态协议:
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息。
也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个“老用户”。
解决方法:
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是“老用户”。
HTTP和HTTPS的区别
- HTTP的URL是以http://开头,而HTTPS的URL是以https:// 开头的;
- HTTP是不安全的,而HTTPS是安全的;
- HTTP的标准端口是80, 而HTTPS的标准端口是443;
- 在OSI网络模型中,HTTP是工作在应用层的,而HTTPS的安全传输机制工作在传输层;
- HTTP无法加密,而HTTPS对传输的数据进行加密
- HTTP无需证书,而HTTPS需要CA机构的颁发的SSL证书。
HTTPS工作原理
-
首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
-
客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);
-
消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
-
发送给服务端,此时只有服务端(RSA私钥)能解密。
-
解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。