一个web请求的全过程
参考文档:
http://www.mamicode.com/info-detail-1357508.html
名词解释
DNS:
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
DNS的功能:
每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。
主机名到IP地址的映射有两种方式:
1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。[
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。
流程
1、在浏览器输入网址
2、浏览器根据域名解析ip地址(dns域名解析)
dns查找过程:
1)浏览器缓存:浏览器会缓存DNS记录一段时间。 但操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
2)系统缓存:如果在浏览器缓存里没有找到需要的域名,浏览器会做一个系统调用(windows里是gethostbyname),这样便可获得系统缓存中的记录。
3)路由器缓存:如果系统缓存也没找到需要的域名,则会向路由器发送查询请求,它一般会有自己的DNS缓存。
4)ISP DNS缓存:如果依然没找到需要的域名,则最后要查的就是ISP缓存DNS的服务器。在这里一般都能找到相应的缓存记录。
域名解析原理:
1)一个域中的每个主机名与其IP地址的映射关系由这个域的DNS服务器负责管理,例如,"www.it.org”、“ftp.it.org”、“blog.it.org”等主机名都由管理域“it.org”的DNS服务器进行管理,而不能由管理域“org”的DNS服务器进行管理。
2)每个管理域都必须在其直接父域的DNS服务器上注册该子域的名称和该子域的DNS服务器的IP地址,例如,必须在管理域“org”的DNS服务器注册子域“it.org”和其DNS服务器的IP地址后,域名“it.org”才能真正被外界所认可。
3)为了方便对顶级域名的统一管理,在顶级域名之上其实还有一个根域名,根域名用点(.)表示,例如,“www.it.org”也可以写为“www.it.org.”,“www.it.org.”中的最后的那个点(.)就表示根域名。 Internet中的根域名由InterNIC(国际互联网络信息中心)集中管理,顶级域名和其下的域名则由拥有该域名的组织、公司和个人自己管理。
3、浏览器与web服务器建立一个 TCP 连接
4、浏览器给Web服务器发送一个http请求
一个web请求的全过程的更多相关文章
- 一个完整的 Web 请求到底发生了什么
阅读本文大概需要 7 分钟. 一.从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面.网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录 ...
- C#中自己动手创建一个Web Server(非Socket实现)
目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...
- kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件
小菜利用工作之余编写了一款Java小插件,主要是用来验证Web请求的数据,是在服务器端进行验证,不是简单的浏览器端验证. 小菜编写的仅仅是一款非常初级的组件而已,但小菜为它写了详细的说明文档. 简单介 ...
- 第一个web框架tornado
简介 tornado,是我学到的第一个web框架是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google ...
- 从Nginx的Web请求处理机制中剖析多进程、多线程、异步IO
Nginx服务器web请求处理机制 从设计架构来说,Nginx服务器是与众不同的.不同之处一方面体现在它的模块化设计,另一方面,也是最重要的一方面,体现在它对客户端请求的处理机制上. Web服务器和客 ...
- eclipes创建一个web项目web.xml不能自动更新的原因(web.xml和@WebServlet的作用)
在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会 ...
- 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序
1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...
- python web编程 创建一个web服务器
这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
随机推荐
- 基于 Ubuntu 系统安装 CUDA 和 cuDNN
************************************************ 显卡:GTX 1050Ti 系统:Ubuntu 18.0.4 安装的CUDA:10.0 版本 **** ...
- WEB API 有效的Action定义
不能有特殊名称(例如属性访问器和运算符的重载方法) 的某些编译器以特殊方式处理的成员.可使用MethodInfo.IsSpecialName判断. 不能标记为[NonAction] 所在的类必须是Ap ...
- sql查询当前数据库的所有表名
SELECT sys.tables.name as TableName from sys.tables
- 使用GitHub/码云/Git个性化设置
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900937935629664 这似乎很可笑,我还从来没有想过为一个网站的使用方法写一篇来记 ...
- redis集群cluster简单设置
环境: 这里参考官方使用一台服务器:Centos 7 redis-5.0.4 192.168.10.10 redis集群cluster最少要3个主节点,所以本次需要创建6个实例:3个主节点,3 ...
- MySQL 分库分表及其平滑扩容方案
转自:https://kefeng.wang/2018/07/22/mysql-sharding/ 众所周知,数据库很容易成为应用系统的瓶颈.单机数据库的资源和处理能力有限,在高并发的分布式系统中,可 ...
- MySQL语言分类——DML
DML DML的全称是Database management Language,数据库管理语言.主要包括以下操作: insert.delete.update.optimize. 本篇对其逐一介绍 IN ...
- 批量操作mysql数据库表
SELECT CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHE ...
- Vue+element 修改样式的scoped穿透方法
我们在修改element的一些样式的时候,在加了scoped的时候会不起作用,下面是解决方案: 解决方法:起一个类名将页面包裹起来,后面加 /deep/ <style scoped> 1 ...
- MySQL容器化详细教程
前言: 上篇文章介绍了Docker工具的安装及常用命令使用.本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker ...