URL:统一资源定位符,偏重定位,是URI的子集,例如网址。URL一定是URI,但URI 不一定是URL。规则:只能用英文阿拉伯数字某些符号等,如果有文字就必须编码。

URI:统一资源标识符,偏重标识,字符串格式规范。

Http:

1、http客户端发起请求,创建端口(例:用手机打开浏览器网页,创建到服务器的默认端口80的TCP链接)

2、http服务器在端口监听客户端请求

3、http服务器向客户端返回状态和内容

当我们输入网址回车或者按h5刷新时计算机和浏览器做的事情:

域名解析: 一、浏览器会先搜索自身的DNS缓存,例如a.imooc.com这个域名已经缓存的ip地址,这个缓存的时间只有1分钟,如有缓存看有没有过期,如果过期这个解析就结束了。查看chrome的缓存:chrome://net-internals/#dns

    二、搜索操作系统自身的DNS缓存,浏览器没有找到缓存或缓存已经失效。如果缓存也没有过期,那解析也到此结束。

    三、读取本地的HOST文件,操作系统自身的DNS缓存也没有找到。

      四、浏览器发起一个DNS的一个系统调用。向本地主控DNS服务器(一般来说是宽带运营商提供的)发起的一个域名解析请求。

运营商的DNS服务器:1、宽带运营商服务器查看本身缓存,查找对应的条目,如果没有过期就解析成功了

2、运营商服务器替浏览器发起一个迭代DNS解析的请求

先找到根域DNS:

     

     拿到com域的ip地址:

            

·

    找到imooc.com这个域的DNS服务器(该服务器由域名的注册商提供。如万网、新网等):

imooc.com域的DNS服务器将查找的结果发送给运营商的DNS服务器,这时运营商的DNS服务器拿到了imooc.com这个域名对应的ip地址,将结果返回给操作系统内核,同时也缓存在自己的缓存区。操作系统内核把ip地址返回给浏览器。最终浏览器拿到了www.imooc.com对应的IP地址。

    五、浏览器获得域名对应的IP地址后,发起HTTP "三次握手"

浏览器以一个随机端口向服务器的web程序,如ngix80端口发起一个TCP的连接请求,这个请求通过层层的路由设备到达服务器端以后进入到网卡,进入到内核的TCP/IP协议栈,可能还需要防火墙的过滤,最终到达web服务端,建立起TCP和IP的连接。

 

三次握手做了什么:客户端向服务器

    六、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。使用了比如说,用HTTP的GET方式请求一个根域里的一个域名,协议可以采用HTTP 1.0的一个协议。

    七、服务器端接收到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器,如果是网站页面就会把完整的HTML页面代码返回给浏览器。

    八、浏览器拿到了网站页面完整的HTML代码,在解析和渲染这个页面的时候,里面的js、css、图片静态资源,他们同样是一个个HTTP请求,都需要经过上面的主要的七个步骤。

    九、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给用户。

HTTP协议的组成:

HTTP头:发送的是一些附加的信息:内容类型、服务器发送响应的日期、HTTP状态码。

正文:就是用户提交的表单数据。

Node.js进击基础一(http)的更多相关文章

  1. Node.js进击基础一(5-11事件模块)

    res.on res有on方法. 在nodejs中不存在浏览器里的冒泡捕获等行为,集成了一个模块events,对外暴露一个对象EventEmitter ,EventEmitter作用只有2个事件的发射 ...

  2. Node.js进击基础一(5-5http知识填坑)

    蚂蚁部落:谷歌浏览器network用法详解 http://www.softwhy.com/forum.php?mod=viewthread&tid=19119 按下f12->Networ ...

  3. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  4. Node.js系列基础学习----安装,实现Hello World, REPL

    Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...

  5. Node.js npm基础安装配置&创建第一个VUE项目

    使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...

  6. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

  7. node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)

    第七章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  8. node.js入门基础

    内容: 1.node.js介绍 2.node.js内置常用模块 3.node.js数据交互 一.node.js介绍 (1)node.js特点 与其他语言相比,有以下优点: 对象.语法和JavaScri ...

  9. 001/Node.js(Mooc)--基础知识

    一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...

随机推荐

  1. 微软VBS生成Excel内容和图表示例

    <HTML> <BODY> <INPUT id=button1 name=button1 type=button value=Button> <SCRIPT ...

  2. shell特殊变量,记录一下

    $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. ...

  3. Ubuntu 16.04 编译OpenCV 问题解决stdlib.h: No such file or directory

    https://blog.csdn.net/xinyu391/article/details/72867510 https://ask.csdn.net/questions/365969

  4. cadence xbl封装转AD

    下载一个 软件 免费试用 导出到ad,出现一个脚本,脚本工程直接拉到ad里面,然后 有这两个文件,启动是有顺序的,顺序一旦错误就会产生大问题,没有任何反应 设置工程启动顺序,再次启动,出现打开文件窗口 ...

  5. ssm,dubbo框架搭建得配置文件

    在建立了parent,common,manager(pojo,mapper,sercie,web)的maven工程后,开始导入添加配置文件: pojo,mapper 最终会打成jar包,service ...

  6. [hardware][intel] intel全系列网卡调研

    除了公司用,我自己还要买一块家用. 但是在这一切开始之前,还需要搞清楚PCIE到底咋回事. 一, 总线 https://zh.wikipedia.org/wiki/%E6%80%BB%E7%BA%BF ...

  7. 《HTTP - 概述》

    晚上听着 木小雅<可能否>,让我这暴躁的一天得以回复一下. 学习是长久之事,不能急躁.应该系统的去学习一些东西. 1:HTTP 最严谨的叫法应该是 超文本转移协议,但大家一般都叫做 超文本 ...

  8. 20165225《Java程序设计》第五周学习总结

    20165225<Java程序设计>第五周学习总结 1.视频与课本中的学习: - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方 ...

  9. 20165225《Java程序设计》第四周学习总结

    20165225<Java程序设计>第四周学习总结 1.视频与课本中的学习: 继承(extends) 重写 对象的上转型对象 super final instanceof运算符 abstr ...

  10. 如何使用Beyond Compare 对比差异文件【制作Patch(补丁包)文件】

    场景:研发部的代码从SVN变更至GIt,通过Jenkins每天自动生成程序包. 如需要获取单独的程序包更新,而不是整个程序包覆盖更新,这时候就需要用到Beyond Compare 对比工具 操作步骤1 ...