002/Node.js(Mooc)--Http知识
1。什么是Http
菜鸟教程:http://www.runoob.com/http/http-tutorial.html
视频地址:https://www.imooc.com/video/6713
http是一个网页互相请求的一个协议。

说明:
【1】。http客户端发起请求,创建端口
【2】。http服务器在端口监听客户端请求
【3】。http服务器向客户端返回状态和内容
如:访问Mooc网址:https://www.imooc.com/video/6712 或刷新页面时,经过很短时间页面即渲染出来。
但在这里面,计算机和浏览器做了许多事情。首先是域名解析。
比如应用Chrome浏览器。则
Step1:Chrome浏览器搜索自身的DNS缓存(看自身的缓存中是否有www.imooc.com这个域名以及IP地址)
输入:chrome://net-internals/#dns 查看曾经浏览网站的缓存记录。
Chrome浏览器隐藏的某些功能:
Chrome 有很多的特性在界面菜单中是没有体现的,你可以通过 chrome:// 命令来访问。本文介绍 12 个非常有用的 chrome:// 命令: . chrome://flags
可用来启用或者关闭某些 chrome 的体验特性 . chrome://dns 该命令将显示浏览器预抓取的主机名列表 . chrome://downloads
该命令同时也可以从菜单中的下载来访问,其快捷键是 Ctrl + J . chrome://extensions
该命令等同于菜单 - 工具 - 扩展 . chrome://bookmarks
改名了等同于菜单-书签-书签管理器,快捷键 Ctrl+Shift+O . chrome://history
该命令可从菜单-历史直接访问,快捷键 Ctrl+H . chrome://memory
该命令将重定向到 “chrome://memory-redirect/”. 它将显示浏览器使用内存的情况,以及系统中运行的其他浏览器,包括 firefox。同时还显示浏览器进程的详细信息。 . chrome://net-internals
该命令显示网络相关信息,用来捕获浏览器生成的网络事件,可导出数据,可查看DNS主机解析缓存。 其中一个很重要的功能就是“测试”,如果你无法访问某个网址,那么可以使用 “chrome://net-internals” -> 点击“Tests” tab -> 输入网址,并点击开始测试,Chrome 将报告具体的问题所在。 . chrome://quota-internals 该命令用来显示浏览器所使用磁盘空间配额的情况。 . chrome://sessions
该命令用来显示当前运行的浏览器的会话信息数以及详细列表 . chrome://settings 该命令可通过菜单-选项直接访问,可用来控制浏览器各项设置值 . chrome://sync-internals 用来显示 chrome 的同步状态 最后,如果你想查看 chrome 所有的命令,可使用 chrome://about/ 另外,请注意,上面提及的所有命令也可使用 about:xxx 命令,将会自动重定向到 chrome://,例如: about:dns chrome://dns Google Chrome浏览器的隐藏功:地址栏应用 about:version -- 显示当前版本 也可以是chrome-resource://about/ about:plugins -- 显示已安装插件 about:histograms -- 显示历史记录 about:dns -- 显示DNS状态 about:cache -- 重定向到 view-cache: 显示缓存页面 view-cache:stats -- 缓存状态 about:stats -- 显示状态 about:network -- 很酷的网络工具(目前无法访问) about:internets -- 这应该算是一个彩蛋(目前无法访问) chrome-resource://new-tab/ -- 新标签页 chrome-resource://favicon/ -- 目前chrome上无法访问 about:memory -- 显示浏览器的内存占用状态(包括其他浏览器) about:flags -- 显示实验室功能
Step2:搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
Step3:若上述1 和 2 均没有查到,则读取本地的HOST文件。
Step4:若HOST文件也没有找到缓存,则浏览器发起一个DNS的一个系统调用。
【1】宽带运营商提供服务器查看本地缓存
【2】运营商服务器(代替浏览器)发起一个迭代DNS解析的请求
运营商服务器把结果返回操作系统内核同时缓存起来,
操作系统内核把结果返回浏览器
最终浏览器拿到了www.imooc.com对应的IP地址
Step5:浏览器获取域名对应的IP地址后,发起HTTP“三次握手”
Step6:TCP/IP 连接建立起来后,浏览器就可以向服务器发送HTTP请求了。如用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。
Step7:服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器,如果是mooc的页面,就会把完整的html页面代码返回给浏览器。
Step8:浏览器拿到了mooc的完整html代码,在解析和渲染这个页面的时候,里面的js/css/图片静态资源。他们同样也是一个个HTTP请求,均需要经过上面7步。
Step9:浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。
HTTP请求流程:分为请求和响应。无论是请求还是响应都会发送一个http头和正文信息

http头和正文信息:
【1】HTTP头:发送的是一些附加的信息(内容类型,服务器发响应的日期,HTTP状态码)
【2】正文:就是用户提交的表单数据(或返回的数据)
2。HTTP概念进阶
【1】。什么是回调
回调是异步编程最基本的方法,
对于node.js来说,按照顺序执行异步逻辑时,一般采用后绪传递的方式。
即将后绪逻辑封装在回调函数中,做为起始函数的参数。逐层嵌套。让程序按照我们期望的方式走完整个流程。

上述:
we(learn,'Nodejs'): 先组装成新的结果nodejs is cool,再将该结果做为参数传给learn函数。
【2】。什么是同步/异步
同步:执行一个任务,后一个任务等待前一个任务执行完毕再执行。(依赖任务顺序)。
浏览器JS代码是单线程的,只能按照顺序执行。当有一个环节有问题,则后序一直被阻塞。
异步:每个任务都有一个/多个回调函数,前一个任务结果不是执行下一个任务,而是执行一个回调函数。后一个任务也不是等待前一个任务结束就执行。
程序的执行顺序与任务的排列顺序是不一致的。是异步的。
javascript中最基础的异步是setTimeout & setInterval
【3】。什么是I/O
I/O:磁盘的写入和读出(数据的进和出)。
【4】。什么是单线程/多线程
单线程:程序的功能是按照顺序执行的,只有前一个程序执行完毕才能执行下一个程序。(线程安全)
多线程:同时执行多个程序。出现问题是争抢资源。
【5】。什么是阻塞/非阻塞
阻塞:单线程易发生阻塞,当一个任务执行不成功,后续均被阻塞
非阻塞:多线程非阻塞,一个任务的执行不依赖于其他任务。
【6】。什么是事件
事件:如鼠标点击是一个事件,拖动也是一个事件。
常见:客户端调用服务端发送请求会触发一个事件,服务端响应客户端又会触发一个事件。读写文件等也会触发事件

【7】。什么是事件驱动
为某个事件注册了回调函数,但是该回调函数不会马上执行。只有当事件发生时才会调用回调函数。这种函数执行的function就叫做事件驱动。
【8】。什么是基于事件驱动的回调
注册回调就是基于事件驱动的回调。
【9】。什么是事件循环
event loop...先进先出的任务队列
如有大量异步操作,IO操作等完成时会调用相应的回调函数,完成密极任务而不发生阻塞,这么多任务就需要有一个机制去管理。这种机制就是事件循环。
以上:node.js适合高并发,IO密极操作等
3。HTTP源码解读之了解作用域和上下文
【1】。什么是作用域
作用域分局部作用域和全局作用域,作用域与变量有关系。
【2】。什么是上下文
调用当前可执行代码的引用。
定义上下文 & 运行上下文 ,可通过call改变指定的上下文
4。HTTP源码解读
视频地址:https://www.imooc.com/video/7963
【1】。打开github.com,输入要搜过的关键字node

【2】。选择一个分支

【3】。选择好12分支后,按快捷键 "t" ,弹出这个仓库的搜索面板。

5。HTTP性能小测试
视频地址:https://www.imooc.com/video/7964
Apache ab(ab:apache bench):超实用压力测试工具-ab工具(https://www.jianshu.com/p/43d04d8baaf7)
在学习ab工具之前,我们需了解几个关于压力测试的概念:
【1】。吞吐率(Requests per second)
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
【2】。并发连接数(The number of concurrent connections)
概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
【3】。并发用户数(The number of concurrent users,Concurrency Level)
概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
【4】。用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
【5】。服务器平均请求等待时间(Time per request: across all concurrent requests)
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即Time per request / Concurrency Level
6。HTTP小爬虫
视频地址:https://www.imooc.com/video/7965
npm install cheerio :安装该插件。优化爬取的内容。达到期望的结果。
002/Node.js(Mooc)--Http知识的更多相关文章
- 001/Node.js(Mooc)--基础知识
一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...
- node.js的基础知识
第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...
- node.js的一些知识
什么是node.js node.js是构建于chrome浏览器v8引擎上的一个js运行环境 可以解析和执行js代码 可以当做另一种上下文,脱离浏览器环境(后端)运行js代码,而代码解析就是基于V8引擎 ...
- Node.js的基础知识(一)
一.Buffer类 1.创建缓冲区的三种方式 var buffer = new Buffer(10); console.log(buffer); var buffer2 = new Buffer([1 ...
- 10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
- Node.js + Web Socket 打造即时聊天程序嗨聊
前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
- 深入浅出Node.js(一):什么是Node.js
Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到 ...
- 使用node.js制作简易爬虫
最近看了些node.js方面的知识,就像拿它来做些什么.因为自己喜欢摄影,经常上蜂鸟网,所以寻思了一下,干脆做个简单的爬虫来扒论坛的帖子. 直接上代码吧. var sys = require(&quo ...
- 深入浅出Node.js(一):什么是Node.js(转贴)
以下内容转自:http://www.infoq.com/cn/articles/what-is-nodejs/ 作者:崔康 [编者按]:Node.js从2009年诞生至今,已经发展了两年有余,其成长的 ...
随机推荐
- ZX树初步
一些数据结构,比如线段树或平衡树,他们一般是要么维护每个元素在原序列中的排列顺序,要么是维护每个元素的大小顺序,若是像二者兼得那么就想想主席树. 给你多个不同的数字问你1-N第K大的数是多少 最简单的 ...
- C#基础知识之System.AppDomain类
进程是存在独立的内存和资源的,但是AppDomain仅仅是逻辑上的一种抽象.一个process可以存在多个AppDomain.各个AppDomain之间的数据时相互独立的.一个线程可以穿梭多个AppD ...
- if_else
//if.......else if......else //object IF_ELSE {// def main(args:Array[String]){// var x=30// if (x== ...
- RabbitMQ发送消息成功,但是接受不到消息
commom模块为mq配置模块 分了多模块后消息队列无法自动创建,发现原因竟然是SpringBoot没有扫描到common模块内的配置类. 我们在XxxApplication启动类上添加@Compon ...
- 每日一蠢 .kettle 下的kettle.properties文件内配置的内容不能被识别
昨天装封装好的ETL 工具 窝将环境变量中的KETTLE_HOME删除了, 结果 .kettle 下的kettle.properties文件内配置的内容不能被识别 can't parse argum ...
- [洛谷P4823] TJOI2013 拯救小矮人
问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...
- 【leetcode】1156. Swap For Longest Repeated Character Substring
题目如下: Given a string text, we are allowed to swap two of the characters in the string. Find the leng ...
- HTTP content-type及POST提交数据方式
Content-Type(内容类型),一般指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个文件,这也是一些网页点击的结果却是一个文件 ...
- PHP入门培训教程 php动态网页怎么转换成html
当动态网页遇上搜索引擎 虽然动态网页相比于静态页面拥有许多优势,但它在搜索引擎的检索上却碰了个大钉子.无论任何一家网站,尤其是那些以营销为目的的企业网站,没有谁会希望自己的网页无法被搜索引擎检索 ...
- Linux内核设计与实现 总结笔记(第十章)内核同步方法
一.原子操作 原子操作可以保证指令以原子的方式执行----执行过程不被打断. 1.1 原子整数操作 针对整数的原子操作只能对atomic_t类型的数据进行处理. 首先,让原子函数只接收atomic_t ...