HTTP知识点(前端需掌握)
1.五层因特⽹协议栈
应⽤层
应⽤层决定了向⽤户提供应⽤服务时通信的活动,应⽤进程间的通信和交互的规则。如HTTP协议,域名系统DNS,⽂件传输协议FTP,电⼦邮件协议SMTP。
域名系统DNS:负责解析域名,提供域名到IP地址之间的解析服务。
HTTP协议:超⽂本传输协议,是互联⽹应⽤最⼴泛的⽹络协议,所有的万维⽹(wwww)⽂件都必须遵守这个标准。
传输层
提供处于⽹络连接中的两台计算机之间的数据传输,会传输应⽤层的相关报⽂。其中有两个不同性质的协议TCP和UDP
TCP:提供⾯向连接的,提供可靠的字节流服务(为了⽅便传输,把⼤块数据分割成以报⽂为单位的数据包,进⾏管理)。提供全双⼯通信,⾸部有20个字节
三次握⼿:为了准确⽆误的将数据包送到⽬的处,会采⽤三次握⼿策略。发送端⾸先会发送⼀个带有SYN标志的数据包给对⽅,对⽅接收后,会回传⼀个带有SYN/ACK标志的数据包,表达确认信息。发送端在回传⼀个带有ACK标志的数据包,表⽰结束。如果某⼀个阶段莫名其妙的中断,TCP会按照相同的顺序继续发送相同的数据包。
nginx部署前端项目UDP:⽆连接的,⾯向报⽂的,尽最⼤可能的交付,不保证可靠⽀付,没有拥塞控制,⽀持⼀对⼀,⼀对多,多对⼀,多对多的交互通信,⾸部开销⼩只有8个字节
⽹络层(⽹络互连层)
处理⽹络上流动的数据包,规定通过怎么样的路劲(传输路线)达到接收⽅主机,并把数据包传给对⽅
数据链路层
来处理连接⽹络的硬件部分。包括控制操作系统,硬件的设备驱动等,硬件上的范畴都在链路层的范围内。
物理层
物理层上传输的单位是⽐特,实现相邻计算机节点之间⽐特流的透明传输,尽肯能屏蔽具体传输介质和物理设备的差异。
OSI 七层协议模型
应⽤层 => 表⽰层 => 会话层 => 传输层 => ⽹络层 => 数据链路层 =>物理层
TCP/IP四层模型
应⽤层 => 传输层 => ⽹络层 => 数据链路层
各层对应图例
HTTP和HTTPS的区别
协议:
HTTP:运⾏在TCP上,明⽂传输,客户端和服务端都⽆法验证对⽅的⾝份。HTTPS:运⾏在SSL(安全套接层)上,SSL运⾏在TCP上,添加了加密和认证机制。
端⼝:
HTTP:80
HTTPS:443
资源消耗:
HTTP:较少
HTTPS:由于有加密操作会更多的消耗CUP和内存资源。
开销:
HTTP:⽆需证书。
HTTPS:需要证书,证书⼀般要向认证机构购买。
加密机制:
HTTP:⽆
HTTPS:共享密钥加密和公开密钥加密并且⽤的是混合加密机制
安全性:
HTTP:弱
HTTPS:强
对称加密和⾮对称加密
对称加密:加密和解密都使⽤同⼀个密钥,存在的问题是密钥如何发送给对⽅。
⾮对称加密:加密⽤公钥和私钥,公钥可以随便发布,私钥只有⾃⼰有。发送的密⽂⽤公钥加密,接受⽅⽤私钥解密,相对于安全,但是速度慢。
HTTP2
HTTP1:浏览器中限制了同⼀个域名下的请求数量(Chrome⼀般6个),请求很多资源的时候,要等前6个请求后才会发送请求。
HTTP2:引⽤了多路复⽤技术,通过⼀个TCP连接可以传输所有的请求数量。可以不受同⼀个域名下
请求数量的问题。
跨域
原因:因为浏览器的同源策略(协议,域名,端⼝)
不受同源策略限制的标签: <script> <img> <iframe> <link> 有src属性可以加载跨域资源。
解决⽅案:
1. JSONP
利⽤script标签的src属性,指向⼀个访问的地址并提供⼀个callback来接收数据。相对于简单,只能⽀持get⽅式。(在head标签动态添加script标签,success帮window随机起名字)
function jsonp(url, jsonpCallback, success) {
let script = ateElement('script')
script.src = url
script.async = true
window[jsonpCallback] = function(data) {
success && success(data)
}
document.body.appendChild(script)
}
jsonp('xxx', 'callback', function(value) {
console.log(value)
})
2.CORS (跨域资源共享)
需要浏览器和后端同时⽀持,浏览器⾃动进⾏cors通信,主要是后端服务器要设置Access-Control-Allo
w-Origin ,就可以开启cors ,这个属性表⽰允许哪些哪些域名可以访问资源,假如设置成通配符,所有⽹站都可以访问资源。
利⽤nginx实现反向代理
server {
listen 8080; # 监听的端⼝
server_name 192.168.1.1; # 配置访问域名
root /data/toor; # 站点根⽬录
error_page 502 404 /page/404.html; # 错误页⾯
location ^~ /api/ { # 使⽤ /api/ 代理 proxy_pass 的值
proxy_pass 192.168.20.1:8080; # 被代理的应⽤服务器 HTTP 地址
}
}
Vue中⽤proxyTable
proxyTable: {
'/weixin': {
target: '192.168.48.11:8100/', // 接⼝的域名
secure: false, // 如果是 https 接⼝,需要配置这个参数
changeOrigin: true, // 如果接⼝跨域,需要进⾏这个参数配置
pathRewrite: {
'^/weixin': ''
}
},
},
原⽣vue
this.$http.jsonp('www.domain2:8080/login', {
params: {},
jsonp: 'onBack'
}).then((res) => {
console.log(res);
})
4. document.domain + iframe 跨域
5. webSocket 协议跨域
6. node 中间件代理跨域
7. postMessage跨域
8. window.name + iframe跨域
9. location.hash + iframe跨域
跨域⽅式详解(segmentfault/a/1190000011145364)
常见状态码:
1XX:临时响应并表⽰请求者继续执⾏操作
100:继续操作
101:切换协议,请求者要求服务器更换协议,服务器已经确认并准备切换
2XX:成功
200:服务器已经成功处理了请求
204:服务器已经成功处理了请求,但是没有返回任何内容
206:服务器成功处理了部分get请求(有范围限制)
3XX:重定向
301:永久重定向请求的⽹页已经移动到新位置
302:临时重定向请求的⽹页临时定位到其他位置了
303:查看其他的位置和302有相同的功能但是303明确要求使⽤get⽅法获取资源304:未修改从上次请求的⽹页未修改过,可以直接⽤客户端没有过期的缓存305:使⽤代理请求者只能使⽤代理访问请求的⽹页
307:临时重定向和302类似不会成post变成get
4XX:请求错误
400:服务器不理解请求的语法,语法错误(可能后台未部署)
401:未授权要求⾝份验证
404:禁⽌不允许访问该资源
404:未到服务器不到请求的⽹页
405:⽅法禁⽤禁⽤请求中使⽤的⽅法
5XX:服务器错误
500:服务器内部错误
501:尚未实施服务器尚不具备请求功能
502:错误⽹关服务器作为⽹关或者代理,从上游服务器收到⽆效响应
503:服务不可⽤服务器停机维护或超载暂时状态
504:⽹关超时服务器作为⽹关或者代理。没有及时从上游服务器收到请求
更详细请移步(wwwblogs/lgp2000/p/6874554.html)
从地址栏输⼊url到页⾯加载完成,发⽣了什么?
1. 从浏览器的地址栏输⼊URL并按下回车
2. 浏览器查当前url是否存在缓存,并⽐较缓存是否过期
3. NDS解析URL对应的IP
4. 根据IP地址建⽴TCP链接
5. HTTP发送请求
6. 服务器处理请求,浏览器接收HTTP响应
7. 渲染页⾯,构建DOM树
8. 关闭TCP链接
缓存:HTTP缓存有很多种规则,根据是否需要重新向服务器发起请求来分类。会有强制缓存和对⽐缓存。
强制缓存判断HTTP⾸部字段 cache-control Expires
Expires:是绝对时间,即服务器时间。如果还没到失效时间就直接使⽤缓存⽂件。但是该⽅法存在⼀个问题:服务器时间与客户端时间可能不⼀致。因此该字段已经很少使⽤。
cache-control中的max-age保存⼀个相对时间。例如Cache-Control: max-age = 484200,表⽰浏览器收到⽂件后,缓存在484200s内均有效。如果同时存在cache-control和Expires,浏览器总是优先使⽤cache-control。
对⽐缓存通过HTTP的last-modified,Etag字段进⾏判断。
last-modified是第⼀次请求资源时,服务器返回的字段,表⽰最后⼀次更新的时间。下⼀次浏览器请求资源时就发送if-modified-since字段。服务器⽤本地Last-modified时间与if-modified-since时间⽐较,如果不⼀致则认为缓存已过期并返回新资源给浏览器;如果时间⼀致则发送304状态码,让浏览器继续使⽤缓存。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论