HTTP简介:
超文本传输协议HTTP主要特点:
支持客户机/服务器模式:浏览器作为客户端像服务器发送各种请求
简单快速:客户端只要传送请求方法参数和路径,规模小,通讯速度快
灵活:可以传输任意类型的对象
无连接:限制每次连接只处理一个客户端请求,即服务器收到客户请求处理完并收到客户应答后立即断开连接(http1.1后,默认使用长连接,服务器会等待一会儿再关闭连接,以保证连接特性)(下层协议对上层透明)
无状态:协议对于事务处理没有记忆能力,即需要之前数据时,数据需要重传
------------------------------------------------1.0-1.1升级长连接 2.0更合理,但是1.1够用而且升级成本太大
http请求结构:
请求头部后必须有空行,浏览器用空行表示头部传送结束
请求相应的步骤:
客户端连接到Web服务器
发送HTTP请求
服务器接受请求并返回HTTP相应
释放连接TCP连接
客户端浏览器解析HTML内容
面试问题:
在浏览器地址栏键入URL后,按下回车以后会经历什么?
1,DNS解析
2,TCP连接
3,发送HTTP请求
4,服务器处理请求并返回HTTP报文
5,浏览器解析渲染页面
6,连接结束
注:45顺序不分先后
HTTP状态码:
五种可能的取值
1XX:提示信息-表示请求已接收急需处理
2XX:成功-请求已经被成功接收、理解、接受
200-ok一切正常
3XX:重定向-要完成请求必须进行更进一步操作
4XX:客户端错误-请求有语法错误或者请求无法实现
401:请求未经授权
403:服务器拒绝服务
404:页面不存在(URL错误)
415:服务器无法处理请求附带的媒体格式(content-type格式有问题)
5XX:服务器端错误-服务器未能实现合法的请求
500:服务器错误(后台代码出现BUG)
503:服务器当前无法处理请求,一会儿可能恢复正常(服务器关闭维修or线程池满了...)
get请求和post请求的区别:
Http报文层面:get将请求放在URL中,POST放在报文体内(需要解析报文更安全一些,但因为是明文的抓包还是可以抓到)
数据库层面:get是幂等(对数据库的一次和多次请求不会改变数据内容)和安全的(不改变数据库内容),post不符合(会往数据库提交数据,每次请求都有可能不一样的结果,每次结果都会在之前的url上添加新资源)
其他层面:get可以被浏览器缓存被存储(基本都是只读请求),post不行(必须交由服务器处理)
Cookie和Session的区别:
Cookie:
服务器发给客户端的特殊信息,以文本形式存放在客户端,会被客户端发送相关请求时返回。服务器接收到后,会解析Cookie生成与客户端相应的内容
客户端-----Http请求------->服务器
服务器--------Http响应+set-Cookies---->客户端
客户端-------Http响应+Cookie----->服务器
服务器-------Http响应------>客户端
session:
服务器端的机制,在服务器上保存的信息
解析客户端请求并操作session id,按需保存状态信息
实现方式:
使用Cookies
使用URL回写 服务器发送给客户端的所有URL都带有session_id参数,但是如果直接在浏览器输入url则无法使用该方法
总结(问题答案):
Cookie数据存放在客户的浏览器上,Session数据放在服务器上
Session相对于Cookie安全,
若考虑减轻服务器负担,应当使用Cookie,Session会比较消耗服务器资源
HTTP和HTTPS的区别:
HTTPS在HTTP层和TCP中间加入了一层SSL或者TLS层,(HTTP-PLUS)
SSL(Secure Sockets Layer 安全套接层)
1)验证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
4)是操作系统对外的api,SSL3.0后更名为TLS(Transport Layer Security 传输层安全)
加密方式:
对称加密:加密解密用同一个密钥
非对称加密:区块链技术 加密解密用一样的密钥
哈希算法:将任意长度的信息转换成某种任意长度的值,算法不可逆
数字签名:证明某个消息是某个人或者机构发出的
HTTPS使用证书并综合其他加密方式:
1,浏览器将支持的hash加密算法信息,随机数i发送给服务器
2,服务器选择一套浏览器支持的加密算法,以证书(验证身份的信息,证书的有效期,发布单位,证书所有者,证书公钥)的方式回发(和一个随机数j)给浏览器
3,浏览器验证证书合法性,接合证书公钥加密请求握手信息发给服务器
4,服务器用私钥解密信息,验证哈希,加密响应握手信息回发浏览器
5,浏览器解密信息,判断服务器端发送过来的hash摘要是否和计算出的摘要一致,则握手结束后,用次加密方式发送数据
主要代码如下:
private
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
总结(问题答案):
HTTPS需要到CA申请证书,HTTP不需要
HTTPS密文传输,HTTP明文传输
连接方式不同,HTTPS默认使用443端口而HTTP使用80
HTTPS=HTTP+加密+认证+完整性保护,比较安全
HTTPS真的安全吗?
浏览器默认填充http://,请求需要进行跳转,有劫持的风险
可以使用HSTS(HTTP Strict Transport Security)优化