目录
- 服务器
- 域名
- 层次结构
- 解析过程
- HTTP
- HTTP请求过程
- get和post的区别
服务器
什么是服务器:
服务器(server),就是一种特殊的计算机,也包括处理器、硬盘、内存、系统总线等,但是由于需要提供更可靠的服务,因此在处理能力、稳定性、可靠性、安全性等方面要求较高
作用:对于WEB来讲,用于存储开发人员上传的网页数据,且需要响应服务请求,并进行处理。 要求:
对于网站服务器来说,为了让用户随时进行访问,必须24小时不间断工作。
这里我们说一下云服务器
逢人必讲我有计算机?我有服务器?不太对味儿 不过我们可以拥有自己的网站 拥有个性化的布局
对于云服务器 国内最常见的可能就是阿里云和腾讯云 以前我总是把百度云和他们搞混。。。
阿里云和腾讯云官网首页产品有云服务器ECS 买个服务器是个很酷的事情好吧 而且对大学生很是友好价格相对便宜
这里小伙伴有购买问题的可以看看B站的 EchoXiaoze
买完服务器理所当然的会想到搭建网站 这里推荐宝塔 真的超级好用
有宝塔建站相关问题解决不了的可以看看我以前的博客
域名
其实这篇文章主要是对域名解析进行资源整合
层次结构
域名是唯一的 域名的层次化来保持它的唯一性
申请域名的性质有个人 公司 学校
.代表根
cn com edu net gov org等为顶级域名
【申请的域名是唯一的】
比如:yuming.com
【域名下却可以有很多服务器】
比如:www.yuming.com、ftp.yuming.com、mail.yuming.com等(费用是一个域名)
【层级结构】
比如:yuming.blog.name.com就是一个四级结构
.com是顶级,www 前缀和不带前缀默认是一级(www.baidu 和baidu),其它词缀是二级(xx.baidu),套娃词缀以此类推层级(xx.xx.baidu)
解析过程
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
补充:
正向查找区:域名解析为IP地址
反向查找区:IP解析为域名
DHCP和DNS组合实现域中计算机IP地址自动配置和域名解析
能登录QQ却打不开百度?原因DNS解析错误 百度域名无法翻译 而QQ直接是IP地址访问
一★DNS递归查询:小明有道题不懂,去问王老师,王老师(直接告诉小明答案)or(也不会,王老师去问张老师答案,然后王老师再把答案告诉小明)
一★DNS迭代查询:小明去问王老师,王老师说乀(ˉεˉ乀)滚,去找张老师问,然后小明去找张老师问
简单说 百度有唯一的域名 唯一的服务器IP地址 两个东西绑在一起了 我们通常记住的是域名 而DNS的工作就是把域名翻译成IP地址 也是一种映射
HTTP
什么是HTTP?
是个P吧…因为协议protocol…
在请求报文和响应报文过程中 HTTP规定了格式
HTTP请求过程
🐵🐵🐵 一、域名解析
最好在阿里云或腾讯云上注册一个域名,然后详细看了一下域名解析的步骤,《深入分析java web》许令波著,当中有详细讲解,
①首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)
②如果浏览器自身的缓存里面没有找到,那么浏览器会搜索操作系统自身的DNS缓存,其实操作系统也会有一个域名解析的过程,在Windows中可以通过C:\Windows\System32drivers\etc\hosts文件来设置,你可以将任何域名解析到任何能够访问的IP地址。如果你在这里指定了一个域名对应的IP地址,那么浏览器会首先使用这个IP地址。 在Linux中这个配置文件是/etc/hosts,修改这个文件可以达到同样的目的。操作系统会在缓存中缓存这个解析结果,缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。
小总结: 前面这两个步骤都是在本机完成的,所以在图1-10中没有表示出来。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
③在我们的网络配置中都会有“DNS服务器地址”这一项,这个地址就用于解决前面所说的如果两个过程无法解析时要怎么办,操作系统会把这个域名发送给这里设置的LDNS(Local DNS),也就是本地区的域名服务器。(这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,例如你是在学校接入互联网,那么你的DNS服务器肯定在你的学校,如果你是在一个小区接入互联网的,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通,也就是通常所说的SPA)
小总结:这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,当然缓存时间是受域名的失效时间控制的,一般缓存空间不是影响域名失效的主要因素。大约80%的域名解析都到这里就已经完成了,所以LDNS主要承担了域名的解析工作。
④如果LDNS仍然没有命中,就直接到RootServer域名服务器请求解析。
⑤根域名服务器返回给本地域名服务器一个所 查询域的主域名服务器(gTLdServer)地址。gTLD是国际顶级域名服务器,如.com、 .cn、.org 等,全球只有(台左右。
⑥本地域名服务器(Local DNS Server) 再向上-步返回的gTLD服务器发送请求。
⑦接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器,例如你在某个域名服务提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
⑧NameServer域名服务器会查询存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP记录,连同一个TTl值返回给DNS Server域名服务器。
⑨返回该域名对应的IP和TTL值,Local DNS Server 会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。
⑩把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,城解析过程结束。
在实际的DNS解析过程中,可能还不止这10个步骤,如Name Sever也可能有多或者有一个GTM来负载均衡控制,这都有可能会影响域名解析的过程。
总结: 一般情况前5步是可以解析出域名的。
🐵🐵🐵二、TCP建立连接(三次握手)
ACK TCP报头的控制位之一,対数据迸行确认.硝人由目的端发出,用它来告泝发送端这个序列号之前的数据段都收到了。
比如,确认号为x,則表示前x-1个数据段都收到了,只有当ACK=1肘,确认号オ有效当,ACK=0时,确认号无效,这时会要求重传数据,保正数据的完整性.SYN同歩序列号,TCP建立连接吋将这个位置1
FIN发送端完成发送任努位,当TCP完成数据传输需要断开吋,提出断开连接的一方将这位置1
TCP三E次握手过程
1主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B ,向主机B请求建立连接,通过这个数据段主机A告诉主机B两件事:我想要和向主机B请求建立连接,通过这个数据段主机A告诉主机B两件事:我想要和向主机B请求建立连接,
通过这个数据段主机A告诉主机B两件事:我想要和向主机B请求建立连接,通过这个数据段主机A告诉主机B两件事:我想要和以传输数据了;你要用哪个序列号作为起始数据段来回应我3主机A收到这个数据段后,
再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
🐵🐵🐵三、建立TCP连接之后,发起HTTP请求
HTTP请求报文由三部分组成:请求行,请求头和请求正文
①请求行:用于描述客户端的请求方式,请求的资源名称以及使用的HTTP协议的版本号(例:GET/books/java.html HTTP/1.1)
②请求头:用于描述客户端请求哪台主机,以及客户端的一些环境信息等
注:这里提一个请求头 Connection,Connection设置为 keep-alive用于说明 客户端这边设置的是,本次HTTP请求之后并不需要关闭TCP连接,这样可以使下次HTTP请求使用相同的TCP通道,节省TCP建立连接的时间
③请求正文:当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中(GET方式是保存在url地址后面,不会放到这里)
🐵🐵🐵四、服务器端响应http请求,浏览器得到html代码
HTTP响应也由三部分组成:状态码,响应头和实体内容
①状态码:状态码用于表示服务器对请求的处理结果
②响应头:响应头用于描述服务器的基本信息,以及客户端如何处理数据
③实体内容:服务器返回给客户端的数据
🐵🐵🐵五、浏览器解析html代码,并请求html代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这是时候就用上 keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里面的顺序,但是由于每个资源大小不一样,而浏览器又是多线程请求请求资源,所以这里显示的顺序并不一定是代码里面的顺序。
🐵🐵🐵六、浏览器对页面进行渲染呈现给用户
最后,浏览器利用自己内部的工作机制,把请求的静态资源和html代码进行渲染,渲染之后呈现给用户
浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程称为relow;当盒模型的位置,大小以及其他属性,如颜色,字体,等确定下来之后,浏览器便开始绘制内容,这个过程称为repain。页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。所以我们应该尽可能少的减少reflow和repain。
JS的解析是由浏览器中的JS解析引擎完成的。JS是单线程运行,JS有可能修改DOM结构,意味着JS执行完成前,后续所有资源的下载是没有必要的,所以JS是单线程,会阻塞后续资源下载
总结:🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵🐵
1.域名解析(这个说了一下域名解析的过程) ,解析出对应IP地址
2.解析成功之后,发起TCP三次握手建立连接
3.建立连接后发起HTTPS请求
4.服务器响应https请求,浏览器得到html代码
5.浏览器解析html代码,并请求静态资源(html/css/js等)
6.然后浏览器渲染,展示给用户
然后分析get和post(面试重点)
get和post的区别
GET和POST是HTTP请求的两种基本方法
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET和POST是什么?HTTP协议中的两种发送请求的方法。
HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。
你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,
送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,
有GET, POST, PUT,
DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。
如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,
让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest
body)提出了要求,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。
虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。
业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request
body偷偷藏了数据,
不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request
body,也不能保证一定能被接收到哦。简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。
GET与POST都有自己的语义,不能随便混用。
在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。