前端HTTP,JavaScript,网络
HTTP
五,与HTTP协作的Web服务器
用单台虚拟主机实现多个域名
通信数据转发程序:代理,网关,隧道
代理:服务器和客户端中间人的角色
使用代理服务器理由:利用缓存技术减少网络带宽的流量。
代理分类:是否使用缓存,是否修改报文
缓存代理。会预先将资源的副本(缓存)保存在代理服务器上
透明代理。不对报文做任何加工的代理
网关:转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,就像自己拥有资源的源服务器一样对请求进行处理
利用网关可以将HTTP请求转化为其他协议通信
隧道:在相隔甚远的客户端和服务器两者间选择中转,保持双方通信连接的应用程序
保存资源的缓存
指代理服务器或客户端本地磁盘内保存的资源副本。能减少对源服务器访问,解释通信流量和通信时间。
转发响应时,复制资源后保存在缓存服务器上。
缓存的有效期限
若缓存失效,缓存服务器将会再次从源服务器上获取“新”资源
客户端的缓存
缓存不仅可在缓存服务器内,也可以在客户端浏览器中。在客户端的缓存:临时网络文件
在HTTP出现之前的协议
FTP传输文件时使用的协议
六,HTTP首部
HTTP报文首部
HTTP请求报文:方法,URI,HTTP版本,HTTP首部字段
HTTP响应报文:HTTP版本,状态码(数字和原因短语),HTTP首部字段
HTTP首部字段
HTTP首部字段传递重要信息
HTTP首部字段结构
首部字段名:字段值 Content-Type:text/html
4种HTTP首部字段类型
通用首部字段
Cache-Control操作缓存的工作机制。
表示是否能缓存的指令:public,private,no-cache(不缓存过期的资源,防止从缓存中返回过期的资源)
控制可执行缓存的对象的指令:no-store(不进行缓存)
指定缓存期限和认证的指令:s-maxage指令,max-age指令,min-fresh指令,max-stale指令,only-if-cached指令,must-revalidate指令,proxy-revalidate指令,
connection
控制不再转发给代理的首部字段
管理持久连接。HTTP/1.1默认持久连接,断开连接需要Close
Date
表明创建HTTP报文的日期和时间
Date: Tue Jul 03 04:40:40:59 2012
Pragma
Cache-Control: no-cache Pragma: no-cache
我不接受缓存
Trailer
首部字段Trailer事先说明在报文主体后记录了哪些首部字段
Transfer-Encoding
规定了传输报文主体时采用的编码方式
Upgrade
检测HTTP协议以及其他协议是否可使用更高的版本进行通信
Via
追踪客户端与服务器之间的请求和响应报文的传输路径
各个代理服务器会往Via首部添加自身服务器的信息
Warning
告知用户一些与缓存相关的问题的警告
请求首部字段
Accept:通知服务器,用户代理可以处理的媒体类型以媒体类型的相对优先级
文本类型text/html
图片文件image/png
视频文件video/mpeg
应用程序使用的二进制文件
Accept-Charset:通知服务器用户代理支持的字符集及字符集的相对优先级的相对顺序
Accept-Encoding:告知服务器用户代理支持的内容编码及内容编码的优先级顺序
gzip
compress
deflate
identity
Accept-Language告知服务器用户代理能处理的自然语言集(指中文或英文)
Expect期望出现的某种特定行为。
From如果有事请联系这个电子邮箱
From:info@hackr.jp
Host告知服务器,请求资源所处在的互联网主机名和端口号
If-Match条件请求。符合匹配条件才返回
If-Modified-Since告知服务器若它字段遭遇资源的更新时间,才处理请求。如果是在它时间之后,如果请求的资源没有更新,则返回304状态码
If-None-Match正好与之前的If-Match相反
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Anthorization
Range
Referer告知服务器请求的原始资源的URI
TE
User-Agent将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
Accept-Ranges告知客户端服务器是否能处理范围内的请求,以指定获取服务器某个部分的资源
Age告知客户端,源服务器在多久前创建了响应。字段值的单位为秒
ETag。首部字段ETag能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。
强ETage,不论实体发生多么细微变化都会改变其值
弱ETag只用于提示资源是否相同,只有资源发生根本改变之后,才改变ETag,
ETag:W/“usagi-1234”
Location配合3xx:重定向的响应,提供重定向的URL
Proxy-Authenticate把代理服务器所要求的认证信息发送给客户端
Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息
Vary
WWW-Authenticate
实体首部字段
Allow
Content-Encoding
Content-Language
Content-Length
Expires会将资源失效的日期告知客户端
Last-Modified指明资源最终修改的时间
为Cookie服务的首部字段
工作机制是用户识别和状态管理。调用Cookie时,由于可校验Cookie的有效期,以及发送方的域,路径,协议等信息,减少被攻击的可能。
Set-Cookie
该拓展不是为了防止XSS攻击开发的
Cookie
七,确保Web安全的HTTPS
信息窃听,身份伪装等安全问题
HTTP缺点
明文通信不加密
不验证信方信息
无法证明报文完整性
遭攻击者拦截并篡改内容的攻击叫中间人攻击
通信加密
SSL安全套接层 TLS安全层传输协议。
内容加密
对报文本身进行加密
HTTP+ 加密+认证+完整性保护 = HTTPS
HTTPS用混合加密机制
JavaScript:核心(ECMAScript),文档对象模型(DOM),浏览器对象模型(BOM)
ECMA-262:语法,类型,语句,关键词,保留字,操作符,全局对象
ES6,2015年发布,支持类,模块,迭代器,生成器,箭头函数,期约,反射,代理和众多数据类型
DOM是一个应用编程接口(API),将整个页面抽象为一组分层节点,DOM通过创建表示文档的树,让开发者可以随心所欲控制网页的内容和结构。使用DOM API,可以轻松删除,添加,替换,修改节点。
DOM级别:
DOM Core。提供映射XML文档,方便访问和操作文档任意部分的方式
DOM HTML。拓展了dom core,增加了特定于HTML的对象和方法。
BOM
浏览器对象模型API,HTML5统一了很多东西,BOM的实现细节会日趋一致。
对象
基本数据类型,复合值。hash,dictionaty。
对比不仅时字符串到值的映射,除可以保持自由的属性,JavaScript对象还可以从一个称为原型的对象继承属性。
prototypal inheritance
网络
GET和POST区别
POST传递的传输在request body,GET传递的参数在url后拼接
GET用于查询,POSTyongyu提交某种信息进行某些修改操作
PST相对于GET安全
GET会被浏览器主动缓存,POST不会,要手动设置
GET请求长度有限制,POST没
POST和PUT请求区别
PUT请求是更新数据
POST为创建数据
HTTP1.1和HTTP2.0区别
二进制协议:1.1解析基于文本,2使用二进制,将请求响应分割成更小的帧,从而实现多路复用
多路复用:
HTTP队头阻塞
TCP队头阻塞
头部信息压缩:1.1请求时会带上所有信息,如Cookie。2引入头部压缩,头部信息使用gzip压缩后再发送
服务器推送:2 允许服务器向客户端主动发资源,局限于静态资源如css,img
HTTP队头阻塞
指同一域名下浏览器连接数有限制(6-8),并且请求要在连接内按顺序处理,这样会导致某个请求的延迟或阻塞会影响后续请求的处理
TCP队头阻塞
TCP协议为了保证数据包的有序传输,如果一个数据包丢失损坏后,TCP接收端会要求重新发送该数据包,直到被正确接收为止
HTTP和HTTPS区别
| HTTP | HTTPS | |
|---|---|---|
| 不需要证书 | 需要CA证书 | |
| 端口 | 80 | 443 |
| 安全性 | 明文传输,不安全 | 基于SSL加密,相对安全 |
HTTP请求中keep-alive是什么
keep-alive时一种长连接
HTTP1.0默认短连接,使用keep-alive能简历长连接
HTTP1.1默认开始长连接
三次握手和四次回收
seq序列号
ack确认号
ACK确认收到序列号
SYN发起新连接
FIN释放一个连接
当在浏览器输入URL并且按下回车键发送了什么
URL解析,判断URL是否规范
浏览器判断缓存,看请求的资源在浏览器是否缓存,如果有缓存就不需要向服务器发送新的请求--强缓存和协商缓存
DNS解析,获取目标服务器IP
建立TCP连接(三次握手)
发送HTTP请求
服务器处理,返回数据
浏览器解析渲染页面
TCP连接关闭(四次挥手)
强缓存和协商缓存区别
强缓存
HTTPS怎么加密的
TLS/SSL层增加到HTTP和TCP层中间

安全层如何实现:混合加密(对称加密—非对称加密)
对称加密
非对称加密
CA证书
客户端和服务器用 非对称加密(RSA) 来安全协商出对称加密的密钥。
协商好后,通信内容用 对称加密(AES) 加密传输,提高速度。
同时双方用 散列函数(Hash) 计算消息摘要,确保传输过程中消息没有被篡改。
大白话:(引入第三方,获取公钥A,进行传输)
服务端传递
CA证书给浏览器客户端通过
CA证书验证网站,拿到公钥A。客户端对称加密生产密钥
X,用公钥A加密后返回服务端服务端用私钥A解密公钥
A,拿到客户端的密钥X后续通信就使用密钥
X进行加密
信息安全:
散列函数hash:把任意长度的数据(消息)映射为固定长度字符串的算法
对称加密
非对称加密
DNS完整查询
浏览器缓存--本地DNS服务器--根域名服务器--顶级域名服务器--权威域名服务器
TCP/UDP
TCP:面向字节流;面向连接,不支持广播和多播
UDP:面向报文;面向无连接
UDP不可靠原因
传输数据前不需要先建立连接、
不需要确认
不跟踪连接
WebSockets原理
long polling长轮询 。跟http很像,建立websocket连接。
在单个TCP连接上实现全双工通信的网络协议,允许服务端和客户端之间保持持久连接,双方可以随时互相发送数据,而不需要每次通信都建立新的连接。
服务器可以向客户端主动推送消息,客户端也可以主动向服务器推送消息。
协商缓存和强缓存
强缓存:使用强缓存策略时,如果缓存资源有效,浏览器会从本地读取缓存资源并返回200
http头信息中的Expires属性和Cache-Control属性
Expires指定资源的过期时间。
Cache-Control属性:
private
public
max-age=xxx过期时间
no- cache不进行强缓存,但有协商缓存
no-store不强缓存,也不协商缓存
两个方式一起用的时候,Cache-Control优先级高于 Expires
协商缓存
命中协商缓存条件:
Cache-Control: no-cache
max-age时间过期
使用协商缓存时,会先向服务器发送一个请求,如果资源没有发生修改,则请求返回304状态,浏览器使用本地 缓存。如果资源发生修改,则返回修改后的内容
在request headers中的Etag属性和Last-Modified属性,来进行设置。其中,ETage优先于Last-Modified。
强缓存和协商缓存区别
强缓存优先级高于协商缓存
协商缓存不管是否命中都会发一次请求
强缓存返回200,协商缓存返回304
Ctrl+F5会强制刷新会跳过所有缓存,而F5刷新跳过强缓存,但是会检查协商缓存。
