http知识补充
在我的职业生涯中,没怎么重视过这http四个字,想当然的觉得不就是个网页请求嘛就没怎么当回事,而且很多http相关的长篇大论一听就困,
真心是弄不下去,但是就是这种观念导致我后期的工作中不断的挖坑,不断的回头去补课,没少吃亏,所以这一节单独拎出来,下一节再来说
这个模块
首先来看一下,什么是http以及和他相关的一些知识
那么什么是http呢,在大学学的课程上和书籍上都讲都很明白,http他就是一种协议,计算机之间要共同遵守这种规则才能彼此之间相互通信
当然现在已经不局限与计算机了,手机,冰箱,电视机啊,这些都可以
那这个协议在使用场景中的流程是怎么样的呢,通常会http客户端发起一个请求,比如用手机的浏览器打开慕课网,那么就创建了到服务器的
端口,一般来说是80的默认端口,这么一个tcp的连接,那http的服务器呢就在端口监听客户端的请求,一但收到请求,服务器就会向客户端
返回一个状态,比如200的一个状态码,同时返回内容,比如文件啊,错误信息啊,json数据等等,那么这就是大概的一个流程,貌似又听懂了
但是还是不够直观
在输入网址到渲染页面,很快就出现了内容,那么在这个过程,计算机和浏览器中间都做了什么事情
比如我们用的是chrome浏览器,那么chrome会先搜索自身的dns缓存,看缓存里面有没有这个域名或者ip地址,那么这个缓存的时间大概
只有一分钟,如果有缓存,就看有没有过期,如果过期,这个解析就结束了,那怎么看chrome自身的缓存呢,我们打开chrome浏览器,通过
输入
chrome://net-internals/#dns
这里就可以查看曾经浏览过的dns缓存纪录,第二步,如果浏览器没有找到缓存,或者缓存已经失效,那么chrome会搜索操作系统自身的dns
缓存,如果找到,而且没有过期,也会停止搜索,然后解析到此结束,第三部,如果操作系统的dns缓存也没有找到,就会尝试读取本地的host
文件,host文件大家应该很熟悉,第四部,如果host文件里面也没有找到对应的配置项,浏览器就会发起一个dns的系统调用,就会向本地主库
dns服务器,一般是由宽带运营商提供的,发起的一个域名解析请求,
那么运营商的dns服务器,首先会查找自身的缓存,找到对应的条目,如果说没有过期,就直接解析成功了,如果说也没有找到这个条目,那么运营
商服务器会代替我们的浏览器发起一个迭代dns解析的请求,运营商通过根域找到com,再找到xx.com,再找到对应的ip地址,然后把结果返回给
运营商服务器,运营商服务器再把结果返回给操作系统内核,同时缓存起来,这个缓存可能会失效,根据时间的长短,然后操作系统内核通过dns
返回的结果,返回给浏览器,最终浏览器拿到了www.xx.com的ip地址
然后到了最后一步,浏览器拿到了ip地址,也就是域名解析完成以后,就拿到了域名对应到ip地址,就会发起经典到tcp三次握手,浏览器就会
向服务器到随机端口发起tcp连接请求,
http://www.cnblogs.com/wzndkj/p/7710730.html
http知识补充的更多相关文章
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- CRM中QueryDict和模型表知识补充
CRM中QueryDict和模型表知识补充 1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(reque ...
- Android知识补充(Android学习笔记)
Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
- SQL语句之 知识补充
SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELI ...
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
- 4-5 Scrapy知识补充
FormRequest FormRequest类是专门用来处理HTML表单的,同时对隐藏的表单处理也很方便.适合用来完成登录操作. 类原型:class scrapy.http.FormRequest( ...
- Redis基础知识补充及持久化、备份介绍
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)–技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis持 ...
- 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算
1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
随机推荐
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- php程序设计 1,2章节
<?php/** * Created by PhpStorm. * User: DY040 * Date: 2017/9/4 * Time: 10:39 * * * 1: php起源于1995 ...
- 在vue2.x中安装sass并配置
在vue中安装sass先检查系统中有没有安装sass,在命令行中输入 sass -v 表示sass在电脑中已有,否者可以参考我这篇博客安装Sass遇到的坑 一.先安装sass cmd打开命令行,到项目 ...
- B-树 B+树 红黑树
B树是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k被称为B树的阶.k的大小取决于磁盘页的大小.B树主要应用于文件系统以及部分数据库索引,比如著名的非关系型数据库MongoDB.一个m阶的B树 ...
- Java基础14-多维数组
1.二位数组可以看成以数组为元素的数组 2.java中多维数组的声明和初始化一样,应该从高维到低维的顺序进行,例如 int[][] a=new int[3][]; a[0]=new int[2]; a ...
- 如何使用python将二维数组去重呢?
二维数组的去重,能和一维的方法类似吗?import numpyc=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))print('二维数组:\n ...
- rail 怎样在已有数据库上继续开发
今天刷贴看到了这篇文章http://ruby-china.org/topics/16493,老大回复的很有意义,在这里备份一个 而要把现有的数据库纳入 Migration,一个简单方法: 创建一个空 ...
- selinux下修改sshd端口号
21 如果已开selinux,修改sshd配置文件 # vim /etc/ssh/sshd_config中的端口号后 重启SSH服务 # systemctl restart sshd.servic ...
- HDU 4364——Matrix operation——————【模拟题】
Matrix operation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- html 01前沿-web介绍
1. 认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 2. 浏览器(显示代码) 浏览器是网页显示.运行的平台,常用的浏览器有IE.火 ...