• 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浏览器隐藏的某些功能:

     1 Chrome 有很多的特性在界面菜单中是没有体现的,你可以通过 chrome:// 命令来访问。本文介绍 12 个非常有用的 chrome:// 命令:
     2 
     3 1. chrome://flags
     4 可用来启用或者关闭某些 chrome 的体验特性
     5 
     6 2. chrome://dns
     7 
     8 该命令将显示浏览器预抓取的主机名列表
     9 
    10 3. chrome://downloads
    11 该命令同时也可以从菜单中的下载来访问,其快捷键是 Ctrl + J
    12 
    13 4. chrome://extensions
    14 该命令等同于菜单 - 工具 - 扩展
    15 
    16 5. chrome://bookmarks
    17 改名了等同于菜单-书签-书签管理器,快捷键 Ctrl+Shift+O
    18 
    19 6. chrome://history
    20 该命令可从菜单-历史直接访问,快捷键 Ctrl+H
    21 
    22 7. chrome://memory
    23 该命令将重定向到 “chrome://memory-redirect/”. 它将显示浏览器使用内存的情况,以及系统中运行的其他浏览器,包括 firefox。同时还显示浏览器进程的详细信息。
    24 
    25 8. chrome://net-internals
    26 该命令显示网络相关信息,用来捕获浏览器生成的网络事件,可导出数据,可查看DNS主机解析缓存。
    27 
    28 其中一个很重要的功能就是“测试”,如果你无法访问某个网址,那么可以使用 “chrome://net-internals” -> 点击“Tests” tab -> 输入网址,并点击开始测试,Chrome 将报告具体的问题所在。
    29 
    30 9. chrome://quota-internals
    31 
    32 该命令用来显示浏览器所使用磁盘空间配额的情况。
    33 
    34 10. chrome://sessions
    35 该命令用来显示当前运行的浏览器的会话信息数以及详细列表
    36 
    37 11. chrome://settings
    38 
    39 该命令可通过菜单-选项直接访问,可用来控制浏览器各项设置值
    40 
    41 12. chrome://sync-internals
    42 
    43 用来显示 chrome 的同步状态
    44 
    45 最后,如果你想查看 chrome 所有的命令,可使用 chrome://about/
    46 
    47 
    48 另外,请注意,上面提及的所有命令也可使用 about:xxx 命令,将会自动重定向到 chrome://,例如:
    49 
    50 about:dns
    51 
    52 chrome://dns
    53 
    54 
    55  Google Chrome浏览器的隐藏功:地址栏应用
    56 
    57 about:version                                        -- 显示当前版本 也可以是chrome-resource://about/
    58 
    59 about:plugins                                       -- 显示已安装插件
    60 
    61 about:histograms                                 -- 显示历史记录
    62 
    63 about:dns                                             -- 显示DNS状态  
    64 
    65 about:cache                                         -- 重定向到 view-cache: 显示缓存页面  
    66 
    67 view-cache:stats                                  -- 缓存状态  
    68 
    69 about:stats                                           -- 显示状态  
    70 
    71 about:network                                     -- 很酷的网络工具(目前无法访问)  
    72 
    73 about:internets                                    -- 这应该算是一个彩蛋(目前无法访问)  
    74 
    75 chrome-resource://new-tab/             -- 新标签页  
    76 
    77 chrome-resource://favicon/               -- 目前chrome上无法访问  
    78 
    79 about:memory                                     -- 显示浏览器的内存占用状态(包括其他浏览器)  
    80 
    81 about:flags                                          -- 显示实验室功能
    View Code

    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)

    概念:服务器并发处理能力的量化描述,单位是reqs/s,
             指的是某个并发用户数下单位时间内处理的请求数。
             某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
    计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
    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 taken for / testsComplete requests
    可以看到,它是吞吐率的倒数。
    同时,它也=用户平均请求等待时间/并发用户数,即Time per request / Concurrency Level

    6。HTTP小爬虫

    视频地址:https://www.imooc.com/video/7965

    npm install cheerio  :安装该插件。优化爬取的内容。达到期望的结果。

  • 相关阅读:
    Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点
    Asp.Net MVC3 简单入门第一季(一)环境准备
    Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
    Entity Framework快速入门一对零到一关系处理
    Html5 学习系列(一)认识HTML5
    程序员体检完事后的感受
    Asp.Net MVC3 简单入门第一季 【索引贴】
    实在忍不住,【转】一篇好文章!题目:【转】想要成功,请记住!
    Html5 学习系列(二)HTML5新增结构标签
    大学应该怎么读?
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9222753.html
Copyright © 2020-2023  润新知