一、IP地址
IP地址的格式:
IP地址分为四个段:xxx.xxx.xxx.xxx,每个段0~255,每个段,都是由8个0、1组成的。
IP地址的分类:
⼀个IP地址分为两个部分:⽹络ID,主机ID
A类:0.0.0.0 ~ 127.255.255.255(⼀个⽹络能有1600+万台)
B类:128.0.0.0 ~ 191.255.255.255(172.16.0.0 ~ 172.31.255.255)
C类:192.0.0.0 ~ 223.255.255.255(192.168.xxx.xxx)
D类:(多播地址)
E类:
二、域名与DNS解析
域名:www.baidu.com
提问:能通过域名直接访问到一台机器吗?
回答:不可以的。
用域名和IP形成对应关系。
⾸先,计算机是不知道域名对应的IP的。
问路由器,如果路由器认识这个域名,就返回⼀个IP,然后计算机访问这个IP。
如果路由器不认识,他就问上⼀层路由器。
如果问到了城市这个级别的路由器的时候,DNS服务器。
如果DNS服务器不认识这个域名,继续向上级DNS服务器查找。
互联⽹建⽴的时候,13台总的DNS服务器。
当向浏览器的地址栏中输⼊⼀个url按回⻋之后,⽹络中都会发⽣什么?
⽐如输⼊的是:123.xyz
看浏览器的缓存。
本机host。
C:windows/system32/drivers/etc/host
127.0.0.1 localhost
0.0.0.0
家⾥路由器
上级路由、城市的LDNS服务器
继续向上级的DNS服务器找。
gDNS服务器。
三、五层网络协议
应用层----------HTTP协议,DNS协议
运输层----------TCP协议、UDP协议
网络层----------IP协议
数据链路层----mac地址
物理层----------通过光纤、铜等传输,0表示低电平,1表示高电平,为1时就电一下,没反应就是0,当然,是有具体时间间隔控制的
四、HTTP协议
请求:Request
请求头
数据体
请求⽅式 url 协议版本
POST /path?a=1&b=2 HTTP1.1
Host:www.baidu.com
Connection: keep-alive
User-Agent:asdasdasd
Cookie
传⽂件的⼀些信息。
GET/POST——HEAD,PUT,DELETE
响应:Response
响应头
数据体
协议版本 状态码 message
属性:值
Get与Post请求⽅式的区别(经典面试题)
- 是基于什么前提的?如果什么前提都没有,不使⽤任何规范,只考虑语法和理论上的HTTP协议。
GET和POST⼏乎没有什么区别,只有名字不⼀样。 - 如果是基于RFC规范的。
(1)理论上的(Specification):GET和POST具有相同语法的,但是有不同的语义。
get是⽤来获取数据的,post是⽤来发送数据的,其他⽅⾯没有区别。
(2)实现上的(Implementation):各种浏览器,就是这个规范的实现者。
常⻅的那些不同:
1)GET的数据在URL是可⻅的。POST请求不显示在URL中。
2)GET对⻓度是有限制的,POST⻓度是⽆限的。
3)GET请求的数据可以收藏为书签,post请求到的数据不可收藏为书签。
4)GET请求后,按后退按钮、刷新按钮⽆影响,post数据会被重新提交。
5)GET编码类型:application/x-www-form-url,post的编码类型:有很多种。
encodeapplication/x-www-form-urlencoded
multipart/form-data
6)GET历史参数会被保留在浏览器⾥,psot不会保存在浏览器中的。
7)GET只允许ASCII.post没有编码限制,允许发⼆进制的。
8)GET与POST相⽐,GET安全性较差,因为所发的数据是URL的⼀部分。
五、Cookie与Session
1.如果我们⽤JS的变量来存数据,那么在⻚⾯关闭的时候,数据就消失了。
2.保持登录状态是怎么做到的呢?
按照正常的HTTP协议来说,是做不到的。
因为HTTP协议,上下⽂⽆关协议。
3. 所以说前端⻚⾯上,有可以持久化存储数据的东⻄。⼀旦登录成功,我就记载在这个⾥⾯。
Cookie是有限制的。
Cookie是存在浏览器⾥的,不是存在某个⻚⾯上的。是可以⻓期存储的。Cookie即使是保存在浏览器⾥,也是存放在不同的域名下的。
- 初始状态:没有登录
- 访问百度的登录,输⼊⽤户名,密码。
- 如果⽤户名和密码是正确的。百度的后端会向这个域名下,设置⼀个Cookie。写⼊⽤户的基本信息(加密的)。
- 以后每⼀次向百度发送请求,浏览器都会⾃动带上这些Cookie。
- 服务端(后端)看到了带有ID的cookie,就可以解析这个加密的ID,来获取到这个⽤户本身的ID。
- 如果能获取到本身的ID,那么就证明这个⽤户已经登录过了。所以后端可以继续保留⽤户的信息。
缺点:如果某个坏⼈,复制了我浏览器⾥的cookie,他就可以在他的电脑上登录我的账号了。
如:XSS注⼊攻击。
Session:数据存在服务器的
数据存在Session上也有缺点
如果⽤户量⾮常⼤,上亿的⽤户。
在⽤户量很⼤的时候,服务器端很耗资源的。
因为后端可能不⽌⼀台服务器,⽤户的登录信息,⼀般只存在⼀台服务器上。
因为⽤户的登录操作,在哪台机器上执⾏的,就⼀般存在哪台机器上。
需要通过反向代理。(轮询,IP哈希。)
六、拓展
B/S结构
Browser/Server——Browser只负责内容的展示,Server负责提供内容。
C/S结构
Client/Server——Client只负责内容的展示,Server负责提供内容。
index.html
页面的本质是什么?
⻚⾯的本质就是⼀个字符串。带有HTML格式的字符串。
浏览器向服务器请求⼀个⻚⾯的本质是什么?
(1)www.baidu.com
(2)服务器接收到这个请求后,服务器想要把这个⻚⾯的内容(HTML格式的字符串)返回给浏览器。
(3)⻚⾯的字符串存在哪⾥呢?存在HTML⽂件⾥。例如:index.html
(4)服务器端要读取⽂件。
(5)将读取出来的内容返回给浏览器。
最后返回的是⼀个字符串,这个字符串的来源可能是⽂件,可能是缓存,可能来⾃于数据库。
七、服务器
服务器:严格的说,服务器是⼀台计算机,这台计算机,只提供服务。(不是⽤户⽤的)
但是,我们常说的这个服务器,指的是服务容器,不是服务器。
服务容器:是⼀个程序。程序可以监听⼀个端⼝。读取⽂件,并且返回。
如果我们想通过访问服务器(服务容器)的⽅式,来访问我们⾃⼰写的⻚⾯。我们就得装⼀个服务容器的程序。
八、跨域访问资源
哪些东⻄属于资源?
js⽂件算吗?js⽂件肯定是算资源的,但是js⽂件是允许被跨域请求的。
css⽂件,jpg,png等。src属性的资源都是可以被跨域请求的。href资源⼤部分都是可以被跨域请求的。
哪些资源算跨域请求的资源?
- 后端接⼝的数据。
- 其它域的cookie
- 其它域的缓存
⻚⾯本身:有协议(http/https),域名,端⼝
要请求的数据:http://www.baidu.com:80
协议,域名,端⼝这三个,有任意⼀个不⼀样就算跨域。
跨域这个行为,发生在哪里?
1.即使跨域了(协议,域名,端⼝号有不⼀样的),请求也可以发出。
2. 服务器端也是可以接收的。
3. 服务器端也是可以正常处理的。
4. 服务器端也是可以正常返回数据。
5. 浏览器也能接收到这些数据。
6. 接收到之后,发现当前⻚⾯的域和请求的域不同,所以判定为跨域。
7. 我们的代码在这等着结果呢,但是因为浏览器判定跨域了,不会把结果传递给我们的代码。
虽然跨域了,但是我们依然需要这个数据,怎么办?
解决跨域问题:
1.后端(别⼈家的)配合我们进⾏跨域。
pan.baidu.com ——> zhidao.baidu.com
(1)JSONP(正常的情况,返回的数据都是JSON格式。JSONP是⼀种特殊的格式。)
(2)后端设置Access-Control-Allow-Origin属性以⽀持跨域。(聊天机器⼈课讲,因为需要nodejs)
2. 后端不配合我们进⾏跨域。
(3)iframe(只能显示,不能控制)
(4)通过后端代理(⾃⼰的后端)(后⾯聊天机器⼈讲,因为需要nodejs)