corscookies ,session, localstorage,sessionstoragewebsocket
域名与DNS解析
DNS的解析过程
- 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。
- 本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。
域名缓存
为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。HTTP与HTTPS
http是一种无状态协议,它对用户的操作没有记忆能力,https是具有安全性的传输协议,比http更安全
- 无状态:协议对客户端没有状态存储
-
HTTP
HTTP 是一种
超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范 超文本:不单单只是本文,它还可以传输图片、音频、视频,甚至点击文字或图片能够进行
超链接的跳转。- 传输:数据需要经过一系列的物理介质从一个端系统传送到另外一个端系统的过程。通常我们把传输数据包的一方称为
请求方,把接到二进制数据包的一方称为应答方。 - 协议:网络中(包括互联网)传递、管理信息的一些规范。
HTTP是一种无状态协议,他对用户的操作没有记忆能力
HTTP 长连接和短连接
在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如:JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。
而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP 1.0/1.1/2.0
HTTP1.1 的主要变化:
- HTTP1.0 经过多年发展,在 1.1 提出了改进。首先是提出了长连接,HTTP 可以在一次 TCP 连接中不断发送请求。
2. 然后 HTTP1.1 支持只发送 header 而不发送 body。原因是先用 header 判断能否成功,再发数据,节约带宽,事实上,post 请求默认就是这样做的。
3. HTTP1.1 的 host 字段。由于虚拟主机可以支持多个域名,所以一般将域名解析后得到 host。HTTP2.0 的主要变化:
- HTTP2.0 支持多路复用,同一个连接可以并发处理多个请求,方法是把 HTTP数据包拆为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个 HTTP请求顺序到达;
2. HTTP2.0 支持服务端推送,就是服务端在 HTTP 请求到达后,除了返回数据之外,还推送了额外的内容给客户端;
3. HTTP2.0 压缩了请求头,同时基本单位是二进制帧流,这样的数据占用空间更少;
4. HTTP2.0 适用于 HTTPS 场景,因为其在 HTTP和 TCP 中间加了一层 SSL 层。GET和POST的区别
- get 方法一般用于请求,它的主要特征是请求服务器返回资源
- get 方法是不安全的,因为你在发送请求的过程中,你的请求参数会拼在 URL 后面,从而导致容易被攻击者窃取,对你的信息造成破坏和伪造
- get 请求的 URL 有长度限制
- get 请求会被浏览器主动 cache
- get 请求在浏览器反复的
回退/前进操作是无害的 - get 请求在发送过程中会产生一个 TCP 数据包,它会把 http header 和 data 一并发送出去,服务器响应 200(返回数据)
post 方法一般用于
表单的提交,相当于是把信息提交给服务器,等待服务器作出响应Date,表示格林威治标准时间
- Cache-Control 缓存控制
- Connection 决定当前事务完成后是否关闭网络连接(keep-alive或者close)
实体标头
Content-Length
Content-Language
Content-Encoding
用来压缩媒体类型。Content-Encoding 指示对实体应用了何种编码。(gzip、compress、deflate、identity)
请求标头
Host
Host 请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的 TCP 端口号。如果没有给定端口号,会自动使用被请求服务的默认端口
Referer
HTTP Referer 属性是请求标头的一部分,当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
If-Modified-Since
If-Modified-Since 通常会与 If-None-Match 搭配使用,If-Modified-Since 用于确认代理或客户端拥有的本地资源的有效性。获取资源的更新日期时间,可通过确认首部字段 Last-Modified 来确定。
如果在
Last-Modified之后更新了服务器资源,那么服务器会响应 200,如果在Last-Modified之后没有更新过资源,则返回 304。
If-None-Match
If-None-Match HTTP 请求标头使请求成为条件请求。对于 GET 和 HEAD 方法,仅当服务器没有与给定资源匹配的 ETag 时,服务器才会以 200 状态发送回请求的资源。对于其他方法,仅当最终现有资源的ETag与列出的任何值都不匹配时,才会处理请求。
Accept
接受请求 HTTP 标头会通告客户端其能够理解的 MIME 类型
Accept-Charset
accept-charset 属性规定服务器处理表单数据所接受的字符集。(UTF-8 - Unicode 字符编码 ;ISO-8859-1 - 拉丁字母表的字符编码)
Accept-Language
首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集。
响应标头
Access-Control-Allow-Origin
一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin ,Access-Control-Allow-Origin 指定一个来源,它告诉浏览器允许该来源进行资源访问。
Keep-Alive
Keep-Alive 表示的是 Connection 非持续连接的存活时间,可以进行指定。
Server
Set-Cookie
Set-Cookie 用于服务器向客户端发送 sessionID。
Transfer-Encoding
首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。
HTTP /1.1 的传输编码方式仅对分块传输编码有效。
X-Frame-Options
HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段
首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。
HTTPS
HTTPS 协议需要到 CA 申请证书,是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;它是由 TLS/SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
HTTP使用明文传输,非常不安全
- SSL (Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层
- TLS (Transport Layer Security 安全传输层协议) 是一个安全传输协议
对称加密和非对称加密
- 对称加密:使用一个密钥,同一个密钥在两方都可以进行加解密
非对称加密:使用公钥和私钥,私钥加密的,公钥可以解密;公钥加密的,私钥可以揭秘
HTTPS结合对称加密和非对称加密
服务端不可能完全使用对称加密,因为服务端不可能存放大量的密钥,它只能存一个key。并且同一个key如果被黑客获取到,它就很容易能解析数据。(服务端只能有一个key,客户端也需要这个key,不安全)
- 服务端也不可能完全使用非对称加密,当服务端使用私钥对返回数据进行加密并传输时,黑客也可以获取到数据,并使用公钥进行解密。(返回时不安全)
- 因此,https使用了
对称加密+非对称加密的方法。- 客户端向服务端索要公钥(pk)
- 客户端使用公钥(pk)对一个字符串进行加密,上传给服务端
- 服务端使用私钥(sk)对传输进行解密,得到字符串
- 之后服务端和客户端就使用这个字符串作为密钥进行对称加密通信
- 不过,上述方式还可能存在中间人攻击。
- 因此,引入CA作为权威第三方,只有经过CA认证的公钥和私钥才是安全的。
对称加密 + 非对称加密 + CA- 客户端在请求时不请求pk了,而是直接请求license(服务端使用CA产生的私钥与自己的公钥生成的证书license)。
- 然后客户端使用CA产生的公钥对license进行解密,就可以得到PK了。(CA产生的公钥是写死在操作系统的)
- 接下来的做法就和之前一样了。
详细步骤:
- 客户端向服务端发起请求,请求包括支持的
SSL的版本和非对称加密的算法,随机数1 - 服务端对客户端返回一个信息,返回包括使用的
SSL版本,使用哈希的算法,随机数2和证书 - 客户端认证证书。
- 客户端向服务端发送数据,包括
随机数3,哈希值(哈希随机数1和随机数2) - 服务端获取到数据,检验哈希值是否是
随机数1和随机数2的哈希值,如果是,通过随机数1,随机数2和随机数3通过算法生成key - 如果认证成功,服务端使用
随机数1,随机数2和一个随机数3哈希生成哈希值传给客户端 - 客户端对比这个1哈希值和
随机数1,随机数2和随机数3的哈希值,如果相同,它也通过随机数1,随机数2和随机数3通过同一个算法算法生成key,这个key与第五步生成的key相同 - 之后,他们就可以进行对称加密传输了
VPN
VPN英文全称:Virtual Private Network(虚拟专用网络)。VPN被定义为通过一个公用互联网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道,使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目的,广泛使用企业办公当中,虚拟专用网也可以是针对企业内部网的扩展,虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网,因此很多办公一族在自己电脑中也需要建立VPN连接,方便远程办公等等。

- VPN网关一般会采用双网卡结构,内网卡接入公司总部A的内部局域网络,外网卡使用公共IP接入Internet。
- 比如说分公司B的终端(192.168.2.2)需要访问总部A的服务器(192.168.1.252),其发出的访问数据包的目标地址为服务器的IP:192.168.1.252。
- 分公司B局域网的VPN网关在接收到终端(192.168.2.2)发出的访问数据包时对其目标地址(192.168.1.252)进行检查,发现目标地址属于公司总部A网络的地址,于是将该数据包根据所采用的VPN技术进行封装,同时VPN网关会构造一个新的VPN数据包,并将封装后的原数据包作为VPN数据包的负载,VPN数据包的目标地址为公司总部A网络的VPN网关的公共IP地址。
- 分公司B局域网的VPN网关将VPN数据包发送到Internet外网中,由于VPN数据包的目标地址是总部A网络的VPN网关的外部地址,所以该数据包将被Internet中的路由正确地发送到总部A网络的VPN网关;
- 总部A网络的VPN网关对接收到的数据包进行检查,如果发现该数据包是从分公司B网络的VPN网关发出的,即可判定该数据包为VPN数据包,并对该数据包进行解包。解包的过程主要是将VPN数据包的包头剥离,将负载通VPN技术反向处理还原成原始的数据包;
- 总部A网络的VPN网关将还原后的原始数据包发送至目标服务器(192.168.1.252)。在服务器(192.168.1.252)看来,它收到的数据包就跟从终端(192.168.2.2)直接发过来的一样。
- 从服务器(192.168.1.252)返回终端(192.168.2.2)的数据包处理过程与上述过程原理是一样的。这样就完成了整个通过VPN的访问。
常见VPN协议
PPTP
点到点 1723端口,是一种支持多协议虚拟专用网络的网络技术,它工作在第二层。通过该协议,远程用户能够通过操作系统以及其装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过Internet安全连接到公司网络
L2TP
L2TP要求网络为IP网络,L2TP要求面向数据包的点对点连接,使用多隧道,提供包头压缩,隧道验证,是一个数据链路层协议,基于UDP,没有加密措施,更多和IPSec协议结合使用
Openvpn
openvpn的技术核心时虚拟网卡,是SSL协议实现的
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机多一个网卡,可以像其他网卡一样配置。它使用OpenSSL库加密数据和控制信息,所有通信都基于一个单一的端口,默认推荐UDP通讯,也支持TCP
如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议
由于openvpn运行在纯应用层,避免了PPTP和L2TP在某些NAT设备后面不被支持的情况
