看到身边有那么多的大佬还在不懈的学习,心里就会愧疚一波,真是越厉害的人越努力啊。
整理下http协议以及相关知识点,方便以后复习。
1.什么是HTTP协议
HTTP超文本传输协议就是指在浏览器发送和服务器接收请求以及返回响应的时候接受要遵守的一套规则,就像汽车在路上行驶也要根据交通规则来进行啊,不然就乱套了。
http超文本传输协议是基于TCP/IP通信协议来传递数据的,在OSI七层中的应用层。
2.HTTP协议的特点
①通信速度比较快,因为HTTP协议简单,客户端每次向服务器发出请求的时候只需要传递请求方法和路径就可以了。
②比较灵活,因为HTTP协议允许传输任意类型的数据对象。正在传输的类型由Content-Type标记。
③比较节省传输时间,因为http是无连接的(无连接的意思是每次连接只会处理一个请求(相对的也会有一个响应))。当服务器处理完客户的请求以后,客户端也拿到了服务器发出的响应,随后断开连接。采用这种方式节省传输时间,ps:更第一个特点也差不多了。。。。
④无状态:HTTP协议是无状态协议(无状态是指协议对事务处理没有记忆能力)。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
3.啥叫无连接无状态呢?
就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的,打个比喻吧,快递员A经常鱼送快递,但鱼没有记忆,A经常给鱼送快递,但鱼不认识快递员咋办?看下个问题哦
4.怎么解决http的无状态无连接呢?
额,就是给鱼儿增加记忆功能,也就是让http协议加上cookie,session,tonken(加上后服务器就知道你登录后属于哪个用户,知道你比较喜欢什么,知道你曾经在网站上做了哪些操作),这样鱼就知道是这个快递员喜欢给我送东西。
5.那什么是cookie,session,tonken 呢?
首先接着用例子说:
快递员A要给鱼儿送快递得进去小区啊,然后小区管理员(服务器),会给A一个cookie,证明A是快递员,这个cookie里面还有一个暗藏的session_id(也是服务器发的),证明A到小区都干啥了,有个记录。以后A到小区后,小区管理员知道A的在小区内所有的轨迹和操作。。。。。
如果不懂例子就看下文::
cookie是什么:是一个验证身份的东东,存储在浏览器内,如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了,如果设置过期时间,那么过期时间到了cookie才会过期。
session是什么:Session是用来鉴权的,Session将数据存储在服务器中,服务器会为每一个用户创建一条session_id并存入到cookie,用户访问服务器 的时候需要拿着sessionid去表明自己的身份。 Session的实现是基于Cookie, Session需要借助于Cookie来存储sessionID。
token是什么:token也是用来鉴权的,鉴定访问的接口是否正常,是否是非法访问,绕过前端访问(每个页面都会有个token,如果你绕过前端直接访问某个页面,token就会鉴定你是绕过前端访问就会拒绝你的请求)
Cookie的原理
(1)客户端第一次请求时,发送数据到服务器。
(2)服务器返回响应信息的同时,还会传回一个cookie(cookie S-001)
(3)客户端接收服务器的响应之后,浏览器会将cookie存放在一个统一的位置。
(4)客户端再次向服务器发送请求的时候,会把Cookie 带给服务器。
(5)这样服务器就知道是哪个用户了。
session的原理:
(1)服务器在处理客户端请求过程中会创建session,并且为该session生存唯一的session ID。(这个session ID在随后的请求中会被用来重新获得已经创建的session。在session被创建后,就可以调用session相关的方法向session中新增内容,这些内容只会保存在服务器中)
(2)服务器将session ID发送到客户端
(3)当客户端再次请求时,就会带上这个session ID
(4)服务器接收到请求之后就会依据Session ID 找到相应的Session ,完成请求
##########################放两个图更容易知道哦#####################
Cookie和session有啥区别里?
①.Cookie相当于授权
②.Session相当于鉴权
③.cookie放在客户端的浏览器上,session放服务器上。
④ Session生成的Session id是在cookie里保存的,cookie被禁止后可以通过URL重写来继续使用session
⑤.cookie不是安全,存放在本地的COOKIE可能被获取并进行COOKIE欺骗。
⑥.session会给服务器带来压力,考虑到服务器性能,应当使用COOKIE。
⑦.cookie只能保存字符串类型,以文本的方式。session通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)
⑧.单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie, Session大小没限制。
6.OSI七层协议
互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,有的分为七层,四层
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
四层划分为:应用层、传输层、网络层、网络接口层。
7.什么是tcp/ip协议
HTTP协议也属于TCP/IP协议,TCP/IP协议是一个协议的集合,里面包含很多协议的,因为TCP、IP协议是两个很重要的协议,就用他两命名了。
TCP/IP协议也就是OSI协议的四层:包括应用层,传输层,网络层,网络访问层。
TCP/IP是面向连接的协议,建立连接需要三次握手,断开连接需要四次挥手。
8.三次握手四次挥手
先聊聊三次握手:
①.发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。
②.接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。
③.最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。
就像A和B打电话,A说是我,听到我声音了吗,B说,我听到了,你能听到我说话吗,A说我能听到啊,咱们开始打电话吧。
三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”
再聊聊四次握手:
①在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号。
②服务端在收到这个信号之后会向客户端发出一个ACK确认信号。
③如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号。
④客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭
通俗的说法
①.Client:我所有东西都说完了
②.Server:我已经全部听到了,但是等等我,我还没说完
③.Server:好了,我已经说完了
④.Client:好的,那我们的通信结束
9.HTTP常见状态码
一般分为五大类:
1xx:还在请求中
2xx:代表成功
3xx:代表重定向
4xx:代表请求有错误
5xx:服务器端有错误
常见状态码以及说名如下:
200:表示一切正常,到了服务器,服务器也正常响应请求。
301是永久重定向,常用的场景是使用域名跳转(发送请求之后,就会返回301状态码,然后返回一个location,提示新的地址,浏览器就会拿着这个新的地址去访问。)
302(临时重定向):指出文件已经被临时已到别处,是临时重定向,用来做临时跳转。接着上面的例子,重定向到 https://www.zhihu.com 的请求又会通过302重定向到 https://www.zhihu.com/signup?next=%2F
304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如前端的js,css图片等(不然再从服务器下载这些就容易造成缓慢)
403(禁止):服务器理解客户端请求,但拒绝处理它,通常由于服务器上文件或目录权限设置所致
404(找不到):服务器上不存在客户端所请求的资源
500(内部服务器错误):服务端程序发生错误
504:超时
10.HTTP协议请求方法
最基本的方法有五种:post,get ,put,head,delete、
http中的put(增加),dellete(删除),post(修改),get(查询)刚好对应常用的增删改查的4个操作,最常用的还是post和get
get 一般用于获取查询资源信息,
post 一般用于更新资源信息
head 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
put 从客户端向服务器发送的数据取代指定文档的内容
delete 请求服务器删除指定页面
最常用的方法是get和post方法。
get方法:常用于像服务器查询某些信息和获取资源
11 HTTP协议和HTTPS协议区别
http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加 密传输协议。SSL协议可以对数据进行加密以及进行身份认证(HTTPS在进行连接的时候也要进行握手和挥手认证,不过握手时要进行身份验证,身份验证通过后传输数据都是加密的数据),所以https对比http更安全
http 和 https 使用的是不同的连接方式,用的默认端口也不一样,前者是 80, 后者是 443。 (这个只是默认端口不一样,实际上端口是可以改的)
http是免费的,https是收费的,百度了下价格到几百到几万不等吧。
12 HTTP请求报文和HTTP响应报文构成
HTTP请求报文由四部分组成
1.请求行:由请求方法,请求地址(url),http协议版本
2.请求头:由各类属性组成
3.空行
4.请求体(body):如果是post方法,会把数据以key value形式发送请求
HTTP响应报文由四部分组成
1.响应行:由报文协议版本,状态码组成
2.响应头:由各类属性组成
3.空行
4.响应体:是服务器返回给客户端的文本信息。
如果没有空行,请求头有多行,区分不开请求头和请求体