写这篇文章的初衷是这样的:我常在各种资料、面经中提及DNS的一些概念,但大多都比较宽泛。比如DNS劫持、DNS实现负载均衡、HTTPDNS等,但对于这些东西是什么,有什么应用场景。却缺少一个系统性的学习、归纳总结过程。本文的目的便是在此,旨在梳理一下DNS相关内容。
1. 什么是DNSDNS即域名系统,全称是Domain Name System。在网络请求的过程中,只要输入一个URL,浏览器就会向这个URL的主机名所对应的服务器发送请求来得到主机的IP。对于浏览器来说,DNS的作用就是将主机名转换为IP地址。引用《计算机网络:自顶向下方法》中的概念:
DNS是:
一个由分层的DNS服务器实现的分布式数据库
一个使得主机能够查询分布式数据库的应用层协议
也就是说,DNS是一个分布式数据库,由分布在全球各地的很多台DNS服务器组成,每台服务器上都保存了一些数据,我们向其中的某些服务器发送一个请求,包含我们要查询的主机名,他就会向我们返回这个主机名对应的IP地址。
所谓分布式就是指世界上没有一台DNS服务器拥有互联网上所有主机的IP地址到域名的映射,每台DNS服务器只负责一部分。
分 ...
这篇文章拖了很久了,今天终于有时间来更新了。HTTPS一直想写,但又不敢写,一来是最近时间不是很多,二来是觉得自己才疏学浅,HTTPS向下可探索的内容很多,自己才略知一二,仍然需要不断学习。
1. HTTP存在的问题
HTTP报文使用明文方式发送,很有可能被第三方窃听
HTTP报文可能被第三方截取后修改通信内容,接收方没有办法发现报文内容的修改
HTTP存在认证的问题,第三方可以冒充他人参与通信
因此,我们使用HTTP传输的内容很容易被中间人窃听、冒充和篡改。具体点说,将HTTP数据提交给TCP层后,数据会经过用户电脑、WIFI路由器、运营商和目标服务器。在这中间的每个环节中,数据都有可能被窃取或者篡改。比如电脑上安装的恶意软件可以修改和篡改HTTP请求的内容,或者连接上WIFI钓鱼路由器,数据也会被黑客抓取或修改……
2. HTTPS简介鉴于HTTP的明文传输和一些其他的问题使得传输过程毫无安全性可言,制约了网上购物、在线支付等一些列场景应用,于是倒逼着我们引入了加密方案。
从HTTP协议栈的层面来看,我们可以在TCP和HTTP之间插入一个安全层,所有经过安全层的数据都会被加密或 ...
1. TCP和UDP的区别TCP是一个面向连接的、可靠的、基于字节流的传输层通信协议。UDP是一个面向无连接的的传输层协议。具体来分析,TCP的三大特性如下:
面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,而 UDP 没有相应建立连接的过程。
可靠性。TCP花了很多的功夫保证连接的可靠。可靠性体现在有状态、可控制。TCP 会精准记录哪些数据发送了,哪些数据被对方接收了,哪些没有被接收到,而且保证数据包按序到达,不允许半点差错。这是有状态。当意识到丢包了或者网络环境不佳,TCP 会根据具体情况调整自己的行为,控制自己的发送速度或者重发。这是可控制。
面向字节流。UDP 的数据传输是基于数据报的,这是因为仅仅只是继承了 IP 层的特性,而 TCP 为了维护状态,将一个个 IP 包变成了字节流。
2. TCP三次握手详见我的文章 05 浅谈传输层协议,这里主要谈一些疑问。
为什么不是两次?前面提到过,TCP三次握手本质是确认初始序列号的过程。只有两次握手的话,服务器发送的初始序号没有被客户端确认。因此无法确认客户端的接收能力。但,如 ...
如题,这篇文章是一些HTTP零散的知识点,主要是一些报文中常用的响应头字段和一些面试题。
1. 请求方法有哪些请求方法,作用分别是什么?
GET:请求指定页面信息,并返回对应实体。
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报文头部。
POST:向指定资源提交数据进行处理请求(例如表单提交或者上传文件)。数据包含在请求体中。POST请 求可能会导致新的资源建立或已有资源修改(不是幂等)。
PUT:从客户端向服务器传送的数据代替指定的文档的内容。
DELETE:请求服务器删除指定的页面。
OPTIONS:允许客户端查看服务器的性能,列出可对资源实行的请求方法,用来跨域请求。
TRACRE:追踪请求-响应的传输路径,主要用于测试和判断。
GET和POST有什么区别?首先最直观的是语义上的区别。接下来是一些细节上的区别:
从缓存的角度,GET请求会被浏览器主动缓存下来,留下历史记录,能存入书签,而POST请求默认不会
从编码的角度,GET请求只能进行URI编码,只能接收ASCll字符,而POST没有限制。
从参数的角度,GET一般放在URI中,在历史记录中也能 ...
1. 多路复用和多路解复用将传输层报文段中的数据交付到正确的套接字的工作被称为多路分解。在源主机不同套接字中收集报文段、封装头信息生成报文,将报文传递到应用层,这个过程称为多路复用。每个报文段发送出去都要携带IP地址和端口等信息,根据IP地址可以定位到接收报文段的主机,根据端口号将报文段发送给合适的套接字。
1.1 无连接(UDP)的多路解复用指的是UDP套接字的分配过程。在源端创建UDP的时候需要指定目标端IP地址和端口号,因此一个UDP套接字由一个二元组来标识=>(目标IP, 目标端口)。不同源地址和端口号的UDP报文段到达主机后,如果它们拥有相同的目标地址和目标端口号,那么就会被分配到一个UDP套接字中。每个套接字就是运行在主机上的一个进程。
图中从左到右IP依次为:A B C,下表是IP B 主机的套接字列表:
Socket
PID
Dest IP
Dest Port
77888
P1
B
6428
……
每个在源主机接收的UDP报文段中都提供了(源端口,目标端口)的”返回地址“。
1.2 面向连接(TCP)的多路解复用指的是TCP套 ...
Web 世界是开放的,这很符合 Web 理念。但如果 Web 世界是绝对自由的,那么页面行为将没有任何限制,这会造成无序或者混沌的局面,出现很多不可控的问题。
比如你打开了一个银行站点,然后又一不小心打开了一个恶意站点,如果没有安全措施,恶意站点就可以做很多事情:
修改银行站点的 DOM、CSSOM 等信息;
在银行站点内部插入 JavaScript 脚本;
劫持用户登录的用户名和密码;
读取银行站点的 Cookie、IndexDB 等数据;
甚至还可以将这些信息上传至自己的服务器,这样就可以在你不知情的情况下伪造一些转账请求等信息。
所以说,在没有安全保障的 Web 世界中,我们是没有隐私的,因此需要安全策略来保障我们的隐私和数据的安全。
1. 同源策略
如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。
浏览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。两个不同的源之间若想要相互访问资源或者操作 DOM,那么会有一套基础的安全策略的制约,我们把这称为同源策略。
具体来讲,同源策略主要表现在 DOM、Web 数据和网络这三个层面:
同源 ...
1.DOM树的构建在渲染流水线中,后面的步骤都直接或者间接地依赖于 DOM 结构,所以本节我们继续沿着网络数据流路径来介绍 DOM 树是怎么生成的以及相关的性能优化策略。
1.1 什么是DOM从网络传给渲染引擎的 HTML 文件字节流是无法直接被渲染引擎理解的,所以要将其转化为渲染引擎能够理解的内部结构,这个结构就是 DOM。DOM 提供了对 HTML 文档结构化的表述。在渲染引擎中,DOM 有三个层面的作用:
从页面的视角来看,DOM 是生成页面的基础数据结构。
从 JavaScript 脚本视角来看,DOM 提供给 JavaScript 脚本操作的接口,通过这套接口,JavaScript 可以对 DOM 结构进行访问,从而改变文档的结构、样式和内容。
从安全视角来看,DOM 是一道安全防护线,一些不安全的内容在 DOM 解析阶段就被拒之门外了。简言之,DOM 是表述 HTML 的内部数据结构,它会将 Web 页面和 JavaScript 脚本连接起来,并过滤一些不安全的内容。
1.2 DOM树的生成在渲染引擎内部,有一个叫 HTML 解析器(HTMLParser) 的模块,它的 ...