从输入一个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 等一系列的知识. 在面试应聘者时也必问这 ...
随机推荐
- 4630 no pain no game 树状数组
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你N个数,然后给你M个询问,每个询问包含一个l 一个r,问你lr 这个区间中任意两个数最 ...
- [转载]mysql的binlog安全删除
[转载]mysql的binlog安全删除 理论上,应该在配置文件/etc/my.cnf中加上binlog过期时间的配置项,expire_logs_days = 10 但是如果没有加这一项,随着产生越 ...
- acdream 1681 跳远女王(BFS,暴力)
Problem Description 娜娜觉得钢琴很无趣了,就抛弃了钢琴,继续往前走,前面是一片湖,娜娜想到湖的对岸,可惜娜娜找了好久都没找到小桥和小船,娜娜也发现自己不是神仙,不能像八仙过海一样. ...
- aspose.Cells 导出Excel
aspose aspse.Cells可以操作Excel,且不依赖于系统环境. 使用模板,通过绑定输出数据源 这种适合于对格式没有特别要求的,直接绑定数据源即可.和数据绑定控件差不多. Workbook ...
- Android的两种上下文的区别
1.Activity.this,Activity是间接继承自Context 2.getApplicationContext()返回来的就是Context 3.getBaseContext()返回的也是 ...
- hdu 3572 Task Schedule(最大流)2010 ACM-ICPC Multi-University Training Contest(13)——Host by UESTC
题意: 告诉我们有m个任务和k个机器.第i个任务需要ci天完成,最早从第ai天开始,最晚在第bi天结束.每台机器每天可以执行一个任务.问,是否可以将所有的任务都按时完成? 输入: 首行输入一个整数t, ...
- 《A Tour of PostgreSQL Internals》学习笔记——系统表和数据类型
上周末学习了<A Tour of PostgreSQL Internals>的第一部分(View 1),今天我们继续打开书本,继续View 2 部分. View 2 Postgresql的 ...
- hdu 1850 Being a Good Boy in Spring Festival(Nimm Game)
题意:Nimm Game 思路:Nimm Game #include<iostream> #include<stdio.h> using namespace std; int ...
- loadrunner下检查点乱码情况处理
对于很多用过LR的人来说,乱码一直是很纠结的事情,尤其是对新手来说.网上给的解决方法是在录制的时候勾选UTF-8选项,但是似乎并没有解决. 对于用户名为中文或者检查点为中文的情况,我们又该如何去处理呢 ...
- Jquery图片随滚动条加载
很久以前的写的Jquery图片随滚动条加载,现在不是什么新技术,应用也很广泛,大大提高图片多的页面打开速度! 有需要的朋友看看吧!有什么意见或建议欢迎留言交流! Demo.html 源码: < ...