1.HTTP的概念
超文本传输协议。
文本就是文字,超文本就是超越文本,包括音频视频啥的。
传输表明有发送端和接收端,是双向的协议。
协议表示规则。
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。端口号默认80。
2.HTTP的常见状态码
3.HTTP的报文和字段
(1)通用报头:既可以出现在请求报头,也可以出现在响应报头中
(2)请求报头:通知服务器关于客户端请求的信息,典型的请求头有:
(3)响应报头:用于服务器传递自身信息的响应,常见的响应报头
Location:用于重定向接受者到一个新的位置,常用在更换域名的时候
Server:包含服务器用来处理请求的系统信息,与User-Agent请求报头是相对应的
(4)实体报头:用来定于被传送资源的信息,既可以用于请求也可用于响应,请求和响应消息都可以传送一个实体
举例它们之间的交流
客户端: Accept-Encoding:gzip (给我压缩一下,我用的是流量,先下载下来我再慢慢解压吧)
服务端1:Content-Encoding:null(没有Content-Encoding头。 我不给压缩,CPU没空,你爱要不要)
服务端2:Content-Encoding:gzip (给你节省流量,压缩一下)
客户端:Connection: keep-alive (大哥,咱好不容易建了个TCP连接,下次接着用)
服务端1: Connection: keep-alive (都不容易,接着用)
服务端2: Connection: close (谁跟你接着用,我们这个TCP是一次性的,下次再找我还得重新连)
4.get和post
(1)概念:get就是要请求从服务器获取超文本资源。post就是向URI指定的资源提交数据,数据就放在报文的body里。
(2)get和post方法都是安全和幂等的吗?(安全的意思是 请求方法不会破坏服务器上的资源。幂等的意思是 多次执行相同操作,结果都是相同的)
get方法是安全并且幂等的,它是只读操作。
post是新增或提交数据的操作,会修改服务器上的资源,所以不安全,且多次提交数据就会创建多个资源,所以不是幂等的。
5.HTTP的版本演变
(1)http/0.9
初代版本,只有一个get方法,纯文本,html格式,是典型的无状态连接。(无状态是指协议会与事务处理没有记忆功能,对同一个请求没有上下文关系,每次请求都是独立的,服务器没有保存客户端的状态)
(2)http/1.0
新增post、head方法;规定客户端和服务器只保持短暂连接(短连接),客户端每次请求都需要建立一次TCP连接,服务器完成请求后就断开TCP连接,服务器也不跟踪每个客户也不记录过去的操作。(支持通过声明keep-alive建立长连接,但默认短连接)
(3)http/1.1
新增put、patch、options、delete方法;
引入长连接,默认TCP连接不关闭,可以被多个请求复用,不用声明keep-alive,服务端发现对方长时间没有活动就会关闭连接;
对同一个域名允许同时建立6个长连接;
引入了管道网络传输机制,即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
管道网络传输的情况下,服务端是按照顺序处理请求的,如果前面的请求需要长时间处理,后面的只能干等,这叫队头堵塞。
缓解队头堵塞的方法:并发连接(就是同时对一个域名发起多个长连接,用数量来解决质量的问题。但这种方式也存在缺陷。如果每个客户端都想自己快,建立很多个连接,用户数×并发数就会是个天文数字。服务器的资源根本就扛不住,或者被服务器认为是恶意攻击,反而会造成“拒绝服务”。所以,HTTP 协议建议客户端使用并发,但不能“滥用”并发。RFC2616 里明确限制每个客户端最多并发 2 个连接)和域名分片(HTTP 协议和浏览器不是限制并发连接数量吗?好,那我就多开几个域名,比如 shard1.chrono.com、shard2.chrono.com,而这些域名都指向同一台服务器 www.chrono.com)。
然后是http/1.1没有解决的问题。
(4)http/2
感受http/2和http/1的并发处理能力,官方演示。
(5)http/3
没能理解,暂不补上
6.HTTP和HTTPS的区别
7.SLL知识点
(1)对称加密
简单,加密与解密用同一把密钥,一对一。
密钥信息越复杂就越大,黑客想要破解就越难;但是加密和解密也会慢,不能一味追求安全,也要兼顾效率。而且这只局限在双方通信,想要和多人通信需要多把密钥,哪有那么多时间造密钥?
(2)非对称加密
公钥加密,私钥解密,一对多。
公钥有很多把,谁都可以有,但私钥只有一把,让安全的一方保管。例如用户与银行,用户巨多,都可以向银行申请公钥加密,将信息加密后发送给银行,银行用私钥解密。私钥自己藏好就行,不需要告诉(网络通信)别人,黑客就拿不到,因此安全性大大增强。
(3)数字签名
验证发送信息的内容是对方发送的数据,没有被篡改过。
即使黑客拿不到解密的密钥,他可以搞事啊,半路把数据乱改一通,用原本的密钥解密解出来的东西就不是对方要传递的信息。数字签名的实现也是通过非对称加密实现的,发送人自己一把密钥加密,多个收件人用同一把公钥解密 以确认是不是发送人发送的东西(签名效果)。
(4)数字证书
通过网络获取到的公钥万一是假的呢?为了确保公钥的真实性。
这里就需要借助第三方权威机构 CA
(数字证书认证机构),将服务器公钥放在数字证书(由CA颁发)中,只要证书是可信的,公钥就是可信的。本质上数字证书是一份电子文档。
8.HTTP的无状态性
(1)概念:协议对于事务处理没有记忆性,例如客户端发http请求给服务端后再发一次,服务器不知道第二个请求是刚才那个用户发的。
设想一个场景,用户小明在网站上购物,登录确认一下小明的身份跳转进购物网页,但是下一秒服务器就不认识小明了,购物或者添加购物车的过程中 一次次验证发送请求的是谁?这样很不人性化。用Cookie和Session技术解决这样的问题。
(2)Cookie技术
Cookie实际上是一小段的文本信息,放在http协议header的字段中。客户请求服务器时,服务器回应的过程中带着一个Cookie信息,下一次客户再请求信息把这个Cookie信息带上,服务器就知道是刚才那货又发来请求了。服务器还可以根据需要修改Cookie的内容。
Cookie技术不可跨域名,例如浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。
保存登录信息的方式有很多种
一和二两种方案验证账号时都要查询数据库。
方案三把账号保存到名为account的Cookie中,把账号连同密钥用MD5算法加密后保存到名为ssid的Cookie中。验证时验证Cookie中的账号与密钥加密后是否与Cookie中的ssid相等。
提示:该加密机制中最重要的部分为算法与密钥。由于MD5算法的不可逆性,即使用户知道了账号与加密后的字符串,也不可能解密得到密钥。因此,只要保管好密钥与算法,该机制就是安全的。
(3)Session技术
(4)Session和Cookie的关系
引用&参考:
https://www.cnblogs.com/suizhikuo/p/8493362.html
https://www.cnblogs.com/xiaolincoding/p/12442435.html
http://www.cftea.com/c/2008/01/LG3YPDRZSTHTJ2IH.asp
https://blog.csdn.net/a66666_/article/details/104102448
https://www.cnblogs.com/lingyejun/p/9282169.html
《三歪教你学http》
原文:https://www.cnblogs.com/shoulinniao/p/12671093.html