服务器:
- 服务器:凡是在互联网中提供服务的服务器都是web服务器
常见的web服务器有:nginx、apache、iis;
本地服务器/远程服务器;
- 客户端:我们把访问服务器的程序
URL:如何访问服务器==》通过url访问 。 同源策略才不会跨域
- hostname是用于精准定位计算机的 ==》主机名,可以是 ip、域名
- port是用于精准定位服务器的==〉端口,http默认是80,https默认是443 区别:??
- protocal是用于告诉服务器使用哪种协议进行传输数据
- path是用于精准定位服务器上的服务的
- query是在使用服务的时候传递的额外信息,具体看服务器要求
- hash是一些额外信息,服务器要不要用具体看服务器要求
http协议:
我们可以通过url地址访问服务器,但是浏览器和服务器之间的数据到底是怎么交互的,数据的格式是什么,这取决于使用什么协议
-
- 请求头
- 请求体
- GET 和 POST请求方法
常见的HTTP状态码:
- 2开头 (请求成功)表示成功处理了请求的状态代码。==>200
- 3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。==>301永久移动,302临时移动,304自从上次请求后,请求的网页未修改过,自己用以前的,以前没有关我服务器啥事
- 4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。==》404找不到如何与 URI 相匹配的资源,403禁止访问,400服务器无法理解请求
- 5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错==》500
《聊天室消息推送》
WebSocket:
是一种在客户端与服务器之间保持TCP长连接的网络协议,这样它们就可以随时进行信息交换。
传统HTTP和Websocket的异同
不同点:
- HTTP是单向数据流,客户端向服务端发送请求,服务端响应并返回数据;Websocket连接后可以实现客户端和服务端双向数据传递。
- 由于是新的协议,HTTP的url使用"http//"或"https//"开头;Websocket的url使用"ws//"开头。
相同点:
- 都需要建立TCP连接
- 都是属于七层协议中的应用层协议
传统通过HTTP请求模拟双向数据传递的方式是http+Polling(轮询)和http+Long Polling(长轮询)
实际应用中,如果需要Websocke进行双向数据通信
WebSocket 与 Socket 的区别:
- Socket 是传输控制层的接口。用户可以通过 Socket 来操作底层 TCP/IP 协议族通信。
- WebSocket 是一个完整应用层协议。
- Socket 更灵活,WebSocket 更易用。
- 两者都能做即时通讯
http与https的区别:
http: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协 议,它可以使浏览器更加高效,使网络传输减少
https: 是以安全为目标的HTTP通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 ,后者是 443
- http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全
get与post的区别:chrome对url的长度限制为8182个ASCII字符
- GET请求一般没有请求体,POST请求有
- GET请求的业务数据放在地址中,安全性较差
- GET请求传递的业务数据量是有限的2kb,POST是无限的
- GET请求利于分享页面结果,POST不行
ajax:
不仅仅是浏览器可以发出请求并获得响应,任何具有网络通信能力的程序均可以这样做。
过去,在浏览器中,只有浏览器本身有发送请求的能力,直到ajax的出现。
ajax是一种技术,让JS语言在浏览器环境中获得了新的API,通过该API,JS代码拥有了和服务器通信的能力
传统的ajax代码如下:
-----------------------
var xhr = new XMLHttpRequest(); //创建发送请求的对象
xhr.onreadystatechange = function(){ //当请求状态发生改变时运行的函数
// xhr.readyState: 一个数字,用于判断请求到了哪个阶段
// 0: 刚刚创建好了请求对象,但还未配置请求(未调用open方法)
// 1: open方法已被调用
// 2: send方法已被调用
// 3: 正在接收服务器的响应消息体
// 4: 服务器响应的所有内容均已接收完毕
// xhr.responseText: 获取服务器响应的消息体文本
// xhr.getResponseHeader("Content-Type") 获取响应头Content-Type
}
xhr.open("请求方法", "url地址"); //配置请求
xhr.send("请求体内容"); //构建请求体,发送到服务器
xhr.setRequestHeader("Content-Type", "application/json"); //设置请求头
同源策略:
所谓同源,就是必须协议、域名、端口都一致的,才叫做同源。例如:http://www.12306.cn和https://www.12306.cn,由于协议不一致,就不是同源。
如果是非同源,就会出现跨域报错,解决的办法有2种:
a、服务端设定这个Access-Control-Allow-Origin的header就可以允许跨域访问了response.setHeader("Access-Control-Allow-Origin", "*"); (是*,所有都可以访问,存在安全隐患)
b、jsonp请求方式,服务器端要处理一下json数据
性能优化:
- 减少 HTTP 请求数
- js/css/图片资源合并压缩
- 图片CSS Sprite雪碧图,懒加载
- 减少dom操作,减少重拍重绘
- 使用缓存SessionStorage和localStorage
- 代码优化
- 使用负载均衡
负载均衡就是将大量的数据处理操作分摊到多个操作单元进行执行,用来解决互联网分布式系统的大流量、高并发和高可用的问题。
xss攻击:
原因:前端页面被插入<script>脚本盗取cookie等信息 解决:将一些危险字符进行html编码
http:缓存机制==浏览器缓存机制:
第一次没有缓存,向服务器发送请求,服务器带有数据和缓存规则,告诉浏览器要不要缓存:缓存,不缓存,时效缓存等
TCP/IP三次握手与四次挥手:
三次握手是为了确保两台主机都有收发能力。A \B两台机器,第一次:A==>B证明a能发; 第二次:B===》证明b能发能收;A 第三次A===〉B证明a能收;
四次挥手:A==>B发完了;B==>A收到;B===A收完了;A==>B收到;
不握手就不能连接,不挥手就不能断开连接
域名解析过程==DNS解析过程:
老李要访问老王家(但是不知地址)==服务器要访问域名(但是不知道Ip):老李先在浏览器找==》没有找host==〉没有找本地(可能每个城市都与dns)DNS===》没有找(互联网上的根域)sever==顶级域名,sever发现.com存在x村服务器,.net在y村服务器,一个村存不了全部,告诉老李去x服务器找,===》老李去指定的顶级域名服务器sever进行域名解析IP==〉拿到结果存在自己本地,同时告诉浏览器==》浏览器也存在自己本地ip和域名,保证下次访问可以快速直接本地访问
输入URL后发生:
http输入==〉URL解析==》进行浏览器缓存/host查询ip==》DNS域名解析==〉得到ip,进行TCP/ip接连3次握手 〈中间连接有5层网络模型〉(4次挥手)==》握手成功,浏览器构造一个没有消息体的GET请求,发送至服务器,==〉服务器处理请求响应数据给浏览器==〉浏览器解析响应数据,有请求重新向服务器发送对该资源的请求,拿到响应结果做处理===》当所有的资源都已下载并处理后,浏览器触发window.onload事件
(可以忽略下面,上面是整体流程)
在浏览器地址栏中输入一个页面地址,按下回车键后发生了什么?
- 浏览器将url地址补充完整:没有书写协议,添加上协议
- 浏览器对url地址进行url编码:如果url地址中出现非ASCII字符,则浏览器会对其进行编码
- 浏览器构造一个没有消息体的GET请求,发送至服务器,等待服务器的响应,此时浏览器标签页往往会出现一个等待的图标
- 服务器接收到请求,将一个HTML页面代码组装到消息体中,响应给浏览器
- 浏览器拿到服务器的响应后,丢弃掉当前页面,开始渲染消息体的html代码。浏览器之所以直到这是一个html代码,是因为服务器的响应头指定了消息类型为text/html
- 浏览器在渲染页面的过程中,发现有其他的嵌入资源,如CSS、JS、图片等
- 浏览器使用不阻塞渲染的方式,重新向服务器发送对该资源的请求,拿到响应结果后根据Content-Type做相应处理
- 当所有的资源都已下载并处理后,浏览器触发window.onload事件