HTTP
关于HTTP
超文本传输协议(HyperText Transfer Protocol)
一种无状态的,以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动
HTTP报文格式
HTTP协议的请求报文和响应报文的结构基本相同,有三大部分组成:
-
起始行(start line):描述请求或响应的基本信息,例如:GET/index.html/HTTP/1.1 HTTP/1.1 200 OK,其中,GET表示为请求方式(此处为读取数据,index.html为源文件,HTTP/1.1为HTTP协议版本,200为响应状态码,响应状态字符串为OK)
-
头部字段集合(header):使用key-value形式更详尽的说明报文,例如:connection:keep-alive
-
消息正文(evtity):实际传输的数据,他不一定是文本,可能是图片,视频等二进制数据,比如html代码等
###请求报文格式 -
请求方法:如GET,HEAD,PUT,POST等,表示对资源的操作
-
请求目标:通常是一个url,标记了请求方法要操作的资源
-
版本号:表示报文使用的HTTP协议版本
响应报文格式
- 版本号:表示HTTP协议版本
- 状态码:一个三位数,用代码的形式表示处理结果,404表示找不到,403表示被禁止,500表示服务器错误,200表示成功(以2开头的三位数都表示成功)
-
原因:作为梳子状态码的补充,帮助理解原因
HTTP头字段
头部字段是key-value 的形式, key和value 之间用“:”分隔,最后用CRLF换行表示字段结束。比如前后分离时经常遇到的要与后端协商传输数据的类型“Content-type applcationjson’,这里key就是Contentype ,value就是applcaton/son’,HTP头字段非常灵活,不仅可以使用标准里的Host、Comnecion等已有头,也可以任意添加自定义头,这就给HTTP协议带来了无限的扩展可能。
头字段的注意事项
- 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符“-”,但不能使用下划线。”(有的服务器不会解析带_的头字段)。字段名后面必须紧接着“:”,不能有空格,而”:”后的字段值前可以有多个空格;
- 字段的顺序是没有意义的,可以任意排列不影响语义;
- 字段原则上不能重复,除非这个字段本身的语义允许,例如Set-Cookie.
常用头字段
HTTP中有非常多的头字段,基本分为三大类:
- 请求字段:请求头中的头字段,如:Host,Referer
- 响应字段:响应头中的头字段,如:Server,Date
- 通用字段:再请求头和响应头中都可以出现,如:Content-type,Connection
HTTP请求的完整过程
当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢?
- 1.首先干活的是浏览器应用程序,他要解析出URL中的域名
- 2.根据域名获取对应的ip地址,首先从浏览器缓存中查看,以Chrome为例,如下可以查看浏览器中域名对应ip的解析:chrome : //net-internals/#events,如果没有则从本机域名解析文件hosts (letchosts)中查看,还没有则从LDNS (Localdnssever) 、 Rootsever域名服务器、国际顶级域名服务商的DNS的层层解析
- 3.拿到IP地址后,浏览器就可以发起与服务器的三次握手
- 4.握手建立之后,就开始组装http请求报文,发送报文
- 5.服务器收到请求报文之后开始,请求报文解析,生成响应数据,发送响应数据
-
6.浏览器收到响应之后,开始渲染页面
HTTPS
由于HTTP天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。因此就诞生了为安全而生的HTTPS协议。使用HTTPS时,所有的HTTP请求和响应在发送到网络之前,都要进行加密。
SSL/TLS
SSL即安全套接层(Secure Sockets Layer),由网景公司于1994年发明,IETF在1999年把它改名为TLS(传输层安全,Transport Layer Security)正式标准化,到今天TLS已经发展出了主流的三个版本,分别是2006年的1.1、2008年的1.2,2018的1.3,每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。
两种加密方法
对称密钥加密算法
编、解码使用相同密钥的算法,如(AES,RC4,ChaCha20)
非对称密钥加密算法
非对称密钥加密算法:它有两个密钥,一个叫“公钥”,一个叫“私钥”。两个密钥是不同的,公钥可以公开给任何人使用,私钼必师严格保盘停。非对称加密可以解决“密钥交换””的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。非对称密钥加密系统通常需要大量的数学运算,比较慢。如(DH、DSA、RSA、ECC )
数字证书的申请和验证
如何申请
1.生成自己的公钥和私钥,服务器自己保留私钥
2.向CA机构提交公钥,公司,域名信息等待认证
3.CA机构通过线上,线下多种途径验证你提交信息的真实性,合法性
4.信息审核通过,CA机构则会向你签发认证的数字证书,包含了公钥,组织信息,CA信息,有效时间,证书序列号,同时生成一个签名;
5.签名步骤: hash(你用于申请证书所提交的明文信息)=信息摘要;CA再使用私钥对信息摘要进行加密,密文就是证书的数字签名
数字证书的组成:
CA信息,公钥用户信息,公钥,权威机构签名,有效期等
作用:
1.通过数组证书想浏览器证明身份
2.数字证书里面包含了公钥
验证数字证书