文章目录
一、基础概念
(一)DNS协议
【1. 域名系统DNS概述】
域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址,即域名到IP的解析,用户使用域名,机器使用IP地址。
查询详细过程: 当某一个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,即DNS的一个客户,将待解析的域名放在DNS请求报文
中,以UDP用户数据报
方式发给本地域名服务器
,本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回
,应用程序获得目的主机的IP地址后即可进行通信
。
- DNS使用UDP协议,因为DNS解析是一种查询服务,查询要求的是速度,而不是精准度,所以用UDP。
- DNS大多数的名字都在本地进行解析,仅少量解析需要在因特网上通信,因此DNS系统的效率很高。
【2. 因特网的域名结构:】
命名方式主要采取树状结构
,这样使得任何一个连接在因特网上的主机或路由器都有一个唯一的层次结构的名字,即域名
。这里的域是名字空间中一个可被管理的划分,与还可以划分为子域等,每一个域名用【.】隔开,如下图所示:
域名只是一个逻辑概念,并不代表计算机所在的物理地点,是为了便于人们使用,机器需要使用的是32位二进制数字。
- 现在的顶级域名分为三类:
国家顶级域名
:如cn表示中国,us表示美国,uk表示英国等。通用顶级域名
:数目总数达到18个,如com表示公司企业,net表示网络服务机构,org表示非营利性组织。基础结构域名
:只有一个,即arap,用于反向域名解析,因此又称为反向域名。
- 二级域名分为两大类:
类别域名
:共七个,包括ac科研结构,com工商金融等企业,edu中国教育结构,gov中国政府机构等。行政区域名
:共34个,适用于我国的各省,自治区,直辖市,如bj表示北京市。
因特网的域名系统可以用 域名树来表示,如下图:
【3. 域名的解析过程:】
主要有两种方式,一种是 递归查询,另一种是 迭代查询。
我们以一个例子说明:假定域名m.xyz.com的主机打算给y.abc.con主机发邮件,那么就需要知道y.abc.com主机的IP地址,下图是两种办法的解析过程:
从上图我们可以清楚的看到迭代查询和递归查询的区别,在递归查询中:
- ①主机m.xyz.com
先向其本地域名服务器dns.xyz.com进行递归查询
。 - ②本地域名服务器采用迭代查询,先
向一个根域名服务器查询
。 - ③
根域名服务器告诉本地域名服务器
,下一次应查询的顶级域名服务器
dns.com的IP地址。 - ④
本地域名服务器向顶级域名服务器dns.com进行查询
。 - ⑤
顶级域名服务器dns.com告诉本地域名服务器
,下一次应查询的权限域名服务器
dns.abc.com的IP地址。 - ⑥
本地域名服务器向权限域名服务器
dns,abc,com进行查询
。 - ⑦
权限域名服务器
dns.abc.com告诉本地域名服务器,所查询的主机的IP地址
。 - ⑧
本地域名服务器
最后把查询结果告诉主机m.xyz.com
。
这8个步骤,需要 8个UDP报文,本地域名服务器经过三次迭代查询后,才从权限域名服务器得到了主机y.abc.con的IP地址,最后将结果返回给查询的主机。
但是使用递归查询,本地域名服务器只需要向根域名服务器查询一次,后面都是在其他几个域名服务器之间进行的,根域名服务器得到结果后给本地,本地将结果给主机。
那我们 总结一下:
- 迭代查询: 类似于问陌生人路线,先问根域名服务器xxx的IP地址在哪,它给你说,应该在顶级域名服务器那,然后你又去问顶级域名服务器,顶级域名服务器给你说,应该在权限域名服务器那,然后你又去问权限域名服务器,最后得到结果,给主机。就是迭代过程,循环的去问下一个目标。
- 递归查询: 类似于问熟人路线,先问根域名服务器,它说你等着我给你去问,然后他去为了顶级域名服务器,顶级域名服务器也说你等着我给你去问,然后去问了权限域名服务器,得到结果后给根域名服务器说,根域名服务器给你说,你再给本机。就是一个递归的过程,由一个函数到另一个函数,找到答案了回退返回答案。
总结:
- 迭代查询:它
先向一个根域名服务器查询
,当根域名服务器收到本地服务器发出的查询请求报文后,告诉本地域名服务器下一步应该查询哪一个域名服务器
,然后本地域名服务器自己进行后续的查询(而不是替代本地域名服务器进行后续的查询)
- 递归查询:
如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份
,向其他根域名服务器继续发出查询请求报文,而不是让本地域名服务器自己进行下一步查询
。
(二)URL统一资源定位符
URL称为统一资源定位符是用来表示从因特网上得到的资源位置和访问这些资源的方法。
URL给资源的位置提供了一种抽象的识别方法并用这种方法给资源定位,只要能够定位,系统就可以对资源进行各种操作
,如存取,更新,替换和查找其属性。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置有以及浏览器应该怎么处理它。
基本URL格式:
<协议>://<主机>:<端口>/<路径>
<协议>://<主机>
完整的、带有授权的URL格式:
协议://用户名://密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志
协议
:告诉浏览器如何处理将要打开的文件,一般是http超文本传输协议,还有https,ftp等协议。主机
:就是指该主机在因特网上的服务+域名,即指出这个文档在哪一个主机上。端口
:忽略时为默认端口路径
:文件的存放的位置。
示例:
http://www/tsinghua.edu.cn/chn/index.htm http为协议,www表示服务,tsinghua.edu.cn为域名,chn/index.ht为文件路径
http://www.baidu.com http为协议,www表示服务,baidu.com域名,服务+域名为主机
还有一个URI很容易和URL搞混:
- URI表示 统一资源标识符,标识某一个互联网的资源,
URL是URI的子集
。 - URL就是用
定位的方式实现URI
,不仅唯一标识
资源,而且还提供了定位
该资源的信息。 URI可以是绝对的,也可以是相对的
,但是URL必须提供绝对的信息
来定位资源位置。
(三)长连接 && 短连接
- 长连接: 浏览器服务器建立连接后,如果两次以上的请求复用同一个TCP连接,则称为长连接,即连接一次后可以进行多次数据交互。
- 短连接: 如果浏览器发送一次请求报文,服务器回复一次应答就断开连接,下次交互再重新进行三次握手建立连接,那么就称为短连接。
长连接比短连接好,可以减少网络中的同步报文,使得服务器响应速度变快。
二、HTTP详解
HTTP(HyperText Transfer Protocol)协议是用于从 WWW 服务器传输超文本到本地浏览器的传送协议
。它可以使浏览器更加高效,使网络传输减少
。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
浏览器与Web服务器在应用层通信使用 HTTP协议。HTTP协议在传输层使用的是TCP协议,所以:
- 浏览器需要和Web服务器三次握手建立连接:连接建立成功后才可以发送HTTP请求报文,服务器收到请求报文后,向浏览器回复HTTP应答报文。
- 浏览器向服务器发送连接前,需要得到服务器的IP及端口:用户在浏览器中通常只输入网址(网站域名),浏览器会通过DNS服务查询获取到的服务器的IP地址,对于端口来讲,使用HTTP协议的程序一般默认使用80端口。
【1. 常用的web服务器:】
Apache
:简单,速度快,性能稳定,可做代理服务器使用。IIS
:安全性,强大,灵活。Nginx
:小巧而高校,可以做高校的负载均衡反向代理Tomact
:技术先进,性能稳定,免费。
【2. HTTP通信过程:】
我们用一张图来描述HTTP的通信过程:
整个通信过程:
输入域名
,例如百度的网址,客户端先通过本地DNS服务器获取百度服务器的IP地址,端口号默认80.得到IP和端口号
,通过connect和服务端进行三次握手建立连接。连接建立成功后
,浏览器向服务器发送HTTP请求报文,即想要获取的网页信息如百度首页。服务器根据请求返回应答报文和应答数据
,客户端收到呈现在浏览器上。
HTTP 协议的作用:规范了浏览器和服务器的数据交互特点。
(一)特点
1. 无状态
无状态的含义:是每一次HTTP请求是没有联系的,当客户端一次HTTP请求完成过后,再一次请求,HTTP并不知道当前客户端是一个老用户。也就是说一个浏览器的连续两次网页请求之间没有任何关联,它们将被Web服务器独立处理。
无状态会带来很多问题,比如你在京东网站第一个页面选择购买商品,跳转到第二个页面进行支付,这个时候服务器无法显示信息,因为它认为这两个页面是独立的,所以需要使用机制,让服务器知道始终是一个客户端在访问。
解决这个问题的办法就是使用Cookie/Session:
(1) Cookie:在 客户端内存中开辟一块内存,即给每一个客户端设置一个标识符,第一次进行页面请求时,设置Cookie,下一次访问就不用再次进行页面请求了。Cookie保存在客户端浏览器上,用来确定身份;
(2) Session:当访问服务器某个页面时,在 服务器开辟一块内存,这块内存就是Session,记录了当前客户端的信息,同一个session就被认为是一个客户端。
Session 是保存在服务器端上会存在一段时间才会消失,如果 Session 过多会增加服务器的压力。
2.无连接:
HTTP是无连接的,因为在传输层使用了面向连接的TCP协议,保证了数据的可靠传输,所以HTTP不必考虑数据在传输过程中被丢弃后怎样重传。
3.长连接:
浏览器和服务器三次握手建立连接后,可以进行多次数据交互,最后断开连接,而不是发一次数据就断开连接。
(二)请求报文结构
一个 HTTP 请求报文由请求行、头部字段、空行和可选的消息体组成:
请求行
:请求方法 URL HTTP 的版本 Get /index.html HTTP/1.1头部字段
:从第二行开始,用来说明浏览器、服务器或报文主体的一些信息。请求头和请求体之间存在一个空行。可选的消息体
:在请求报文中一般不使用这个字段,在响应报文中也可能没有这个字段。如果消息体非空,则 HTTP 请求的头部字段必须包含该消息体长度的字段 Content-Length。
如浏览器向服务器请求index.html页面:
常见请求方法:
请求方法 | 含义 |
---|---|
GET | 申请获取资源,而不对服务器产生任何其他影响 |
HEAD | 和GET方法类似,不过仅要求服务器返回头部信息,而不需要传输任何实际内容 |
POST | 客户端向服务器提交数据的方法,这种方法会影响服务器,服务器可能根据收到的数据动态创建新的资源,也可能更新原有的资源 |
PUT | 上传某个资源 |
DELETE | 删除某个资源 |
TRACE | 要求目标服务器返回原始HTTP请求的内容,它用来查看中间服务器(比如代理服务器)对HTTP请求的影响。 |
OPTIONS | 查看服务器对某个特定URL都支持哪些请求方法,也可以把URL设置为*,从而获得服务器支持的所有请求方法。 |
CONNECT | 用于某些代理服务器,它们能把请求的连接转化为一个安全隧道 |
PATCH | 对某个资源做部分修改 |
(三)响应报文结构
一个 HTTP 响应报文由状态行、头部字段和实体主体三部分组成:
状态行
:HTTP 协议版本、状态码、状态信息 HTTP/1.1 200 OK。头部字段
:其表示方法和 HTTP 请求中的头部字段的相同实体主体
:一般不使用
服务器对浏览器的响应报文:
状态码种类:
状态类型 | 状态码和状态信息 | 含义 |
---|---|---|
1XX | 100 Continue | 服务器收到了客户端的请求行和头部信息,告诉客户端继续发送Expect:100-continue头部字段告诉服务器自己还有数据要发送。 |
2XX | 200 ok | 请求成功 |
3xx | 301 Moved Permancently | 资源被转移,请求被重定位 |
301 Found | 通知客户端资源能在其他地方找到,但是需要使用GET方法(申请资源)来获取 | |
304 Not Modified | 表示被申请的资源没有更新,和之前获得的相同 | |
307 Temporary | 通知客户端资源能在其他地方找到,与302不同的是,客户端可以使用和原始请求相同的请求方法来访问目标资源 | |
4xx | 404 Bad Request | 客户端请求错误 |
401 Unauthorized | 请求需要认证信息 | |
403 Forbidden | 访问服务器被禁止,通常是由于客户端没有权限访问该资源 | |
404 Not Found | 资源没找到 | |
407 Proxy Authentication Required | 客户端需要先获得代理服务器的认证 | |
5XX | 500 Internal Server Error | 服务器错误 |
503 Service Unavailable | 暂时无法访问服务器 |
三、常见问题
(一)HTTP协议和HTTPS协议的区别?
HTTP是互联网上应用最为广泛的一种网络协议,用于www服务器传输超文本到本地浏览器的传输协议,他可以使浏览器更加高效时网络传输减少。
HTTPS简单来说就是HTTP的安全版。即在HTTP下加入SSL层,HTTPS的安全基础就是SSL。其主要作用包括建立一个信息安全通道来保证数据传输的安全另一个是确认网站的真实性。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
HTTP的缺陷
HTTP以明文方式发送内容
,不提供任何方式的数据加密
。如果攻击者截取
了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息
,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。由此设计出的HTTPS协议:由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
他们的主要区别如下:
https协议需要到CA
(Certificate Authority,证书颁发机构)申请证书,需要一定费用。- http是超文本传输协议,信息是
明文传输
,https则是具有安全性的ssl加密传输协议
。 - http和https使用的是完全不同的连接方式,用的端口也不一样,
前者是80,后者是443。
http数据包的发送、传输和接收都是相互独立的称为无状态的
。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
。
HTTPS的加密算法:详细加密过程讲解
(二)HTTP协议版本1.0和1.1的区别
- HTTP 1.0 规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。
- HTTP 1.1 增加了一个 Connection 字段,通过设置 Keep-Alive 可以保持 HTTP 连接不断开,避免了每次客户端与服务器请求都要重复建立释放建立 TCP 连接,提高了网络的利用率。如果客户端想关闭 HTTP 连接,可以在请求头中携带 Connection: false 来告知服务器关闭请求。
(三)请求方法GET和POST的区别?
- 本质: GET是从服务器获取数据;POST向服务器传送数据。
- URL可见性:GET传参的方式是通过地址栏URL传递,可以直接看到GET传递的参数;POST通过请求传递参数,将请求信息放置在报文体中,要获取信息必须解析报文。
- 安全性:POST的安全性比GET安全性高,GRT提交数据,会将信息明文出现在URL上,POST就不会。
- 缓存:GET请求能够被缓存,GET请求会保存在浏览器的浏览记录中,能够保存为浏览器书签;POST不具备这些。
- 数据库层面:GET是获取数据采取查询操作,所以不会改变数据库中的数据;POST是传送数据,对数据库进行添加操作,会改变数据库中的数值。每一次POST获取的结果不一样。
- 传输数据的大小:GET传递数据通过URL进行传递,受到URL大小的限制,如IE浏览器为最长2083字符,火狐,谷歌为8182字符;POST没有长度限制。
- 后退方式:GET后退没有影响;POST会重新进行提交。
- 编码方式:GET只支持URL,POST支持多种。
- 效率:GET效率比POST高,因为POST需要进行两次TCP数据报传送,第一次确认,第二次发数据(但有的浏览器一次,如火狐);GET一次。GET比POST总体效率高
(四)浏览器中输入网址后发生了什么(万维网的工作过程)?
在浏览器属于URL网址
,点击搜索。应用层DNS解析域名
:客户端先检查本地是否有对应的IP地址,有就返回对应的IP地址,没有就请求上级DNS服务器,利用迭代查询或递归查询获得IP地址。服务器不断地监听LISTEN端口80是否有浏览器向它发出连接请求。
- 获得IP地址和端口号后,
浏览器发送请求报文,服务器监听到连接请求,立即进行三次握手建立TCP连接
。 - 连接建立成功后,
浏览器发送HTTP请求报文
,将请求方式,目标页面等信息传送。 - 服务器收到浏览器请求报文,在对应目录下找到资源,
返回响应报文包含状态码,资源信息给浏览器。
- 浏览器**
收到响应报文后进行解析,呈现页面。
** - 数据交互完成后,
四次挥手断开浏览器和客户端的连接。
【hosts的作用:】Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。需要注意的是,Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则将不能访问。
加油哦!明天见🍝。