从输入一个URL到页面呈现,网络上都发生了什么?
归纳一下其中涉及到前端的一些基础知识,主要包括:http协议、web标准、w3c标准等。
这个问题虽然只有两个2个动作:输入URL和呈现页面,但这背后发生了很多"有趣"的事情,这个过程也涉及到很多方面的技术,包括像浏览器、DNS、http、html、服务器等。如果让我来回答,它大致的过程应该是这样的:DNS解析-->建立连接,发送数据包 -->服务器响应请求,返回给浏览器-->浏览器渲染程序页面。
1.DNS解析
当我搜索这个问题的时候,首先在浏览器输入了一个URL地址,但URL中服务器地址是一个域名而不是一个指定的IP地址,路由器并不知道你想要查找的地址,那么DNS域名解析系统会将该域名解析成ip,而IP地址是唯一的, 每一个ip地址对应网络上的一台计算机。
URL(Uniform Resoure Locator)统一资源定位器,URL的组成:<scheme>资源类型+<host>服务器地址(域名/ip):<port>端口号/path路径(服务器资源的路径)
2.建立网络连接,发送数据包
由于1的努力,已经能够根据ip和端口号与网络上对应的服务器建立连接,浏览器这边会向服务器发送一个数据包,里面包含了大量的信息,但这个数据包有一定的格式。就像我给你邮个快递,也得遵循邮递公司的一些规则吧!我得写上我的身份信息、寄的物品、标明邮递地址....道理是一样的,到了网络中这些规则就是“Http协议(网络协议)”。
涉及到的一些问("面试")题:
什么是http协议?它的主要内容。
http协议是客户端和服务器端两者通信共同遵循的一些规则。主要内容是定义了客户端如何向服务器请求资源,服务器如何响应客户端请求。
请求中的POST与 GET方法有什么区别?
1.根据HTTP规范,GET用于信息获取,而且应该是安全的,这里的安全是指非修改的信息,就像在数据库执行查询一样,不会修改数据,也不会增加删减数据,不会影响资源的状态,而post可能会改变数据的原始状态。
2.GET提交的数据最多只有1024字节,理论上POST是没有限制的。
3.从请求的URL中可以找到一个区别:GET请求的数据会附在URL之后,在浏览器URL栏就能看的。似乎POST比GET更可靠一些,因为它请求把提交的数据放在包体中,地址栏上不可见。(也有的解释说两者都没有长度限制,根本的区别就是一个是获取数据,一个修改数据!)
3.服务器响应请求,返回给浏览器
服务器会分解你的数据包,例如你查找的是一个文档,那么服务器可能会返回一个doc文档或者zip压缩资源给你;如果你访问的是一个链接页面,那么服务器相应的返回一个包含HTML/CSS标记文档,这些请求和响应都有一个通用的写法,这些规则也就是前面提到的"http协议"。
客户端向服务器请求资源时,除了告诉服务器要请求的资源,同时还会附带一些其他的信息,这部分信息放在"header"部分(服务器响应请求也一样!),主要有请求头(略)和响应头,这里以响应头部信息为例:
http响应头详解:
Request URL:https://static.zhihu.com/static/revved/-/css/m.652b53b3.css
Request Method:GET
Status Code:200 OK (from cache)
Remote Address:123.125.110.16:443
Response Headers
accept-ranges:bytes //在整个返回体中本部分的字节位置
access-control-allow-origin:*//跨域请求,*则允许所有域名的脚本访问该资源。
cache-control:max-age=600 //指定请求和响应遵循的缓存机制,当你请求头里设置no-cache时,是告诉服务器我这里没有缓存。响应头里这里设置的时间是600,意思浏览器600秒之内别来找我,自己去缓存找吧!
content-encoding:gzip // web服务器支持的返回内容压缩编码类型为gzip,web服务器表明自己使用了什么压缩方法。
content-length:49207 //资源长度
content-type:text/css //告诉客户端,资源文件的类型,一般还有字符编码,例如charset=UTF-8,客户端将通过utf-8对资源进行解码,然后对资源进行html解析。
date:Mon, 07 Mar 2016 12:23:37 GMT//记录时间
expires:Mon, 07 Mar 2016 12:33:37 GMT //表明该实体将于什么时候过期
last-modified:Mon, 07 Mar 2016 07:19:19 GMT//请求资源的最后修改时间
server:nnws/1.7.3.6 //服务器信息,by the way!这是啥服务器?
status:200 OK //状态码
version:HTTP/1.1 //http协议版本1.1
x-cache-lookup:Hit From MemCache Gz //查看服务器中是否有某个网页缓存,有则返回Hit,没有返回Miss
看到http响应状态码我突然想到了404,= =!顺便带几个常见的:
100 Continue 继续,一般在发送post请求时,已发送了http、header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
301 Moved Permanently 请求的网页已永久移动到新位置。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
4.浏览器渲染呈现
浏览器拿到响应的页面代码,将其解析呈现在用户面前,至于为什么会是看到的这个样子,有时又是另外的一些页面效果,这里就涉及到web标准了,也就是我们经常提到的w3c标准。根据资源的类型,在网页上呈现给用户,这个过程叫网页渲染。解析和呈现的过程主要由浏览器的渲染引擎实现,浏览器的渲染引擎质量就决定了浏览器的好坏(引擎这一块已经超出了我的理解范围了)。
W3c标准:
web标准不是某一个标准,而是一系列标准的集合。
网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。
对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由万维网联盟(外语缩写:W3C)起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。
HTML、XHTML、XML三者有什么区别?
从名字上基本可以看出点端倪,HTML是超文本标记语言,XHTML是可扩展超文本标记语言,XHTML比HTML更加规范、严格。其实是用xml语意重新定义了html,XHTML是扮演者html角色的可扩展标记语言(就是XML)。XHTML是一个过渡技术,结合了XML的强大功能,及大多数html的基本特性。可以这么认为:XHTML=XML+HTML,XHTML被创造出来的目的是取代HTML,显然它并没有完成历史使命。
为什么HTML5里面我们不需要DTD(Document Type Definition文档类型定义)?
HTML5使用最新的HTML标准,它并没有使用SGML或者XHTML,但是你仍然需要使用<! DOCTYPE html>让浏览器识别这是HTML文档。
顺便带一下SGML
SGML(标准通用标记语言)是一个标准,告诉我们怎么去指定文档标记。他是只描述文档标记应该是怎么样的元语言,HTML是被用SGML描述的标记语言。
因此利用SGML创建了HTML参照和必须共同遵守的DTD,你会经常在HTML页面的头部发现“DOCTYPE”属性,用来定义用于解析目标DTD。(2016-3-8晚补充更新)
但实际上输入URL到页面呈现这背后涉及的内容远远不止这些,例如后台web服务器、双向的网络数据传输、http缓存策略等,这些知识没有时间再去罗列!归纳一下其中涉及到前端的一些基础知识,主要包括:http协议、web标准、w3c标准等。
这个问题虽然只有两个2个动作:输入URL和呈现页面,但这背后发生了很多"有趣"的事情,这个过程也涉及到很多方面的技术,包括像浏览器、DNS、http、html、服务器等。如果让我来回答,它大致的过程应该是这样的:DNS解析-->建立连接,发送数据包 -->服务器响应请求,返回给浏览器-->浏览器渲染程序页面。
1.DNS解析
当我搜索这个问题的时候,首先在浏览器输入了一个URL地址,但URL中服务器地址是一个域名而不是一个指定的IP地址,路由器并不知道你想要查找的地址,那么DNS域名解析系统会将该域名解析成ip,而IP地址是唯一的, 每一个ip地址对应网络上的一台计算机。
URL(Uniform Resoure Locator)统一资源定位器,URL的组成:<scheme>资源类型+<host>服务器地址(域名/ip):<port>端口号/path路径(服务器资源的路径)
2.建立网络连接,发送数据包
由于1的努力,已经能够根据ip和端口号与网络上对应的服务器建立连接,浏览器这边会向服务器发送一个数据包,里面包含了大量的信息,但这个数据包有一定的格式。就像我给你邮个快递,也得遵循邮递公司的一些规则吧!我得写上我的身份信息、寄的物品、标明邮递地址....道理是一样的,到了网络中这些规则就是“Http协议(网络协议)”。
涉及到的一些问("面试")题:
什么是http协议?它的主要内容。
http协议是客户端和服务器端两者通信共同遵循的一些规则。主要内容是定义了客户端如何向服务器请求资源,服务器如何响应客户端请求。
请求中的POST与 GET方法有什么区别?
1.根据HTTP规范,GET用于信息获取,而且应该是安全的,这里的安全是指非修改的信息,就像在数据库执行查询一样,不会修改数据,也不会增加删减数据,不会影响资源的状态,而post可能会改变数据的原始状态。
2.GET提交的数据最多只有1024字节,理论上POST是没有限制的。
3.从请求的URL中可以找到一个区别:GET请求的数据会附在URL之后,在浏览器URL栏就能看的。似乎POST比GET更可靠一些,因为它请求把提交的数据放在包体中,地址栏上不可见。(也有的解释说两者都没有长度限制,根本的区别就是一个是获取数据,一个修改数据!)
3.服务器响应请求,返回给浏览器
服务器会分解你的数据包,例如你查找的是一个文档,那么服务器可能会返回一个doc文档或者zip压缩资源给你;如果你访问的是一个链接页面,那么服务器相应的返回一个包含HTML/CSS标记文档,这些请求和响应都有一个通用的写法,这些规则也就是前面提到的"http协议"。
客户端向服务器请求资源时,除了告诉服务器要请求的资源,同时还会附带一些其他的信息,这部分信息放在"header"部分(服务器响应请求也一样!),主要有请求头(略)和响应头,这里以响应头部信息为例:
http响应头详解:
Request URL:https://static.zhihu.com/static/revved/-/css/m.652b53b3.css
Request Method:GET
Status Code:200 OK (from cache)
Remote Address:123.125.110.16:443
Response Headers
accept-ranges:bytes //在整个返回体中本部分的字节位置
access-control-allow-origin:*//跨域请求,*则允许所有域名的脚本访问该资源。
cache-control:max-age=600 //指定请求和响应遵循的缓存机制,当你请求头里设置no-cache时,是告诉服务器我这里没有缓存。响应头里这里设置的时间是600,意思浏览器600秒之内别来找我,自己去缓存找吧!
content-encoding:gzip // web服务器支持的返回内容压缩编码类型为gzip,web服务器表明自己使用了什么压缩方法。
content-length:49207 //资源长度
content-type:text/css //告诉客户端,资源文件的类型,一般还有字符编码,例如charset=UTF-8,客户端将通过utf-8对资源进行解码,然后对资源进行html解析。
date:Mon, 07 Mar 2016 12:23:37 GMT//记录时间
expires:Mon, 07 Mar 2016 12:33:37 GMT //表明该实体将于什么时候过期
last-modified:Mon, 07 Mar 2016 07:19:19 GMT//请求资源的最后修改时间
server:nnws/1.7.3.6 //服务器信息,by the way!这是啥服务器?
status:200 OK //状态码
version:HTTP/1.1 //http协议版本1.1
x-cache-lookup:Hit From MemCache Gz //查看服务器中是否有某个网页缓存,有则返回Hit,没有返回Miss
看到http响应状态码我突然想到了404,= =!顺便带几个常见的:
100 Continue 继续,一般在发送post请求时,已发送了http、header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
301 Moved Permanently 请求的网页已永久移动到新位置。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
4.浏览器渲染呈现
浏览器拿到响应的页面代码,将其解析呈现在用户面前,至于为什么会是看到的这个样子,有时又是另外的一些页面效果,这里就涉及到web标准了,也就是我们经常提到的w3c标准。根据资源的类型,在网页上呈现给用户,这个过程叫网页渲染。解析和呈现的过程主要由浏览器的渲染引擎实现,浏览器的渲染引擎质量就决定了浏览器的好坏(引擎这一块已经超出了我的理解范围了)。
W3c标准:
web标准不是某一个标准,而是一系列标准的集合。
网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。
对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。这些标准大部分由万维网联盟(外语缩写:W3C)起草和发布,也有一些是其他标准组织制订的标准,比如ECMA(European Computer Manufacturers Association)的ECMAScript标准。
HTML、XHTML、XML三者有什么区别?
从名字上基本可以看出点端倪,HTML是超文本标记语言,XHTML是可扩展超文本标记语言,XHTML比HTML更加规范、严格。其实是用xml语意重新定义了html,XHTML是扮演者html角色的可扩展标记语言(就是XML)。XHTML是一个过渡技术,结合了XML的强大功能,及大多数html的基本特性。可以这么认为:XHTML=XML+HTML,XHTML被创造出来的目的是取代HTML,显然它并没有完成历史使命。
为什么HTML5里面我们不需要DTD(Document Type Definition文档类型定义)?
HTML5使用最新的HTML标准,它并没有使用SGML或者XHTML,但是你仍然需要使用<! DOCTYPE html>让浏览器识别这是HTML文档。
顺便带一下SGML
SGML(标准通用标记语言)是一个标准,告诉我们怎么去指定文档标记。他是只描述文档标记应该是怎么样的元语言,HTML是被用SGML描述的标记语言。
因此利用SGML创建了HTML参照和必须共同遵守的DTD,你会经常在HTML页面的头部发现“DOCTYPE”属性,用来定义用于解析目标DTD。(2016-3-8晚补充更新)
但实际上输入URL到页面呈现这背后涉及的内容远远不止这些,例如后台web服务器、双向的网络数据传输、http缓存策略等,这些知识没有时间再去罗列!
从输入一个URL到页面呈现,网络上都发生了什么?的更多相关文章
- 输入一个URL到页面呈现其中发生的过程-------http过程详解
在我们点击一个网址,到它能够呈现在浏览器中,展示在我们面前,这个过程中,电脑里,网络上,究竟发生了什么事情. 服务器启动监听模式 那我们就开始了,故事其实并不是从在浏览器的地址栏输入一个网址,或者我们 ...
- 从输入一个URL到页面渲染的流程简介
首先说明以下是我参考网上答案和自己的思考,给出自己的想法,如果有问题,欢迎大家吐槽从用户在浏览器中输入一个URL,到整个页面渲染,这个过程中究竟发生了什么呢?今天先简单写下整个过程,后面再一点点完善. ...
- 从输入url到页面加载完成都发生了什么?
原文地址: http://segmentfault.com/a/1190000003925803 根据 URL 请求页面过程 过程概述 浏览器查找域名对应的 IP 地址: 浏览器根据 IP 地址与服务 ...
- 从输入一个URL到页面完全显示发生了什么?
这是经典的前端问题,主要是对浏览器的工作原理有个理解! 网络通信走的一般是五层因特网协议,详见下图.图片来自于https://images2018.cnblogs.com/blog/882926/20 ...
- 从浏览器输入url到页面加载完成都发生了什么
一个http请求的过程 简要介绍一下一个http请求的网络传输过程: DNS Lookup先获得URL对应的IP地址 Socket Connect浏览器和服务器建立TCP连接 Send Request ...
- 从输入url到页面加载完成都发生了什么
https://zhuanlan.zhihu.com/p/23155051 参考 一个http请求的过程 简要介绍一下一个http请求的网络传输过程: DNS Lookup先获得URL对应的IP地址( ...
- 网易笔试题:浏览器中输入一个url后回车到返回页面信息的过程
You enter a URL into the browser输入一个url地址 The browser looks up the IP address for the domain name浏览器 ...
- 从输入url到页面呈现的过程
从输入url到页面呈现的过程包括两个基本过程:网络通信和页面渲染 网络通信主要过程是 域名解析 -> TCP连接 -> HTTP请求 -> 服务端响应,返回HTML 页面渲染的主要过 ...
- 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?
“在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...
随机推荐
- UVa 11039 (排序+贪心) Building designing
白书上的例题比较难,认真理解样例代码有助于提高自己 后面的练习题相对简单,独立思考解决问题,增强信心 题意:n个绝对值各不相同的非0整数,选出尽量多的数排成序列,使得该序列正负交错且绝对值递增. 解法 ...
- UVALive 5713 Qin Shi Huang's National Road System秦始皇修路(MST,最小瓶颈路)
题意: 秦始皇要在n个城市之间修路,而徐福声可以用法术位秦始皇免费修1条路,每个城市还有人口数,现要求徐福声所修之路的两城市的人口数之和A尽量大,而使n个城市互通需要修的路长B尽量短,从而使得A/B最 ...
- postgresql - mac 启动 关闭 postgresql
/Library/PostgreSQL/9.3/bin/pg_ctl -D /Library/PostgreSQL/9.3/data stop /Library/PostgreSQL/9.3/bin/ ...
- java多线程模拟停车系统
import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...
- hibernate中使用fetch来决策性能方案
什么时候用子查询,或者连接查询 一般多个数据的对应用子查询,单一行的数据用连接 (若要查询每个学生分别学了什么课程 ,若要fetch=join.fetch=select) 则是这种情况 Hiberna ...
- Mac 上安装MySQL
http://blog.neten.de/posts/2014/01/27/install-mysql-using-homebrew/ http://www.wkii.org/mac-os-x-ins ...
- win7下的IP-主机名映射
今天学了个技巧,win7下有个目录:C:\Windows\System32\drivers\etc 该目录下有个文件: hosts 在这个文件里面我们可以映射IP-主机名: 127.0.0.1 loc ...
- Excel学习笔记杂荟
Excel学习 一.工具->选项 可以对整个excel里面的东西进行编辑,里面有隐藏行号,下拉档等选项,有文档作者信息. 隐藏网格等 二.单元格内容比较大可以右击单元格->设置单元格格式- ...
- LA 2995 Image Is Everything 立方体成像 World Final 2004
有一个 n * n * n 的立方体,其中一些单位立方体已经缺失(剩下部分不一定连通).每个单位立方体重 1 克,且被涂上单一的颜色(即 6 个面的一颜色相同).给出前.左.后.右.顶.底 6 个视图 ...
- Java中原子类的实现
Java提供的原子类是靠sun基于CAS实现的,CAS是一种乐观锁.关于乐观锁与悲观锁. 原子变量类相当于一种泛化的volatile变量,能够支持原子的和有条件的读-改-写操作.AtomicInteg ...