当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑、打开浏览器、输入网址、浏览页面信息、点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了?(PS,白话式叙述,有些啰嗦,勿喷。)

一、基础普及:

  首先先定义几个名词,我们使用电脑上的浏览器访问网页,那么我们的电脑浏览器(Browser)就是客户端(Client),想一下:其实我们都是客户;而网上有一个大型的服务器(大点的电脑主机)用于存储我们看到的页面、视频、图片等等数据,服务器会根据我们的要求,将指定的内容发给我们,这个大型的服务器就是服务端(Server)。

  客户端通过网络将需求发给服务端,服务端也是通过网络将数据发给客户端,数据在网络上高速传输,就好比汽车行驶在高速公路上,为了保证安全、顺畅的行驶,我们都需要遵守交通规则,同样数据在网络上传输也需要遵守一定的规则--称为协议,互联网相关的协议多如牛毛,所有的这些协议统称为TCP/IP协议族,而我们熟知的HTTP就属于其中的一员。

  每一个服务器都有一个唯一的IP地址,这个IP地址相当于服务器的身份证号,不同的服务器IP地址肯定不同,而客户端访问服务器,实际上是通过IP地址找到服务器进行访问的,但是IP地址是纯数字,比如120.25.254.88,普通人类难以记住,于是聪明的人类就发明了域名,像:www.baidu.com、www.google.cn,这样就亲民多了,域名和IP地址一一对应,由浏览器负责将域名翻译成IP地址,这个过程叫做解析

二、具体过程及解释

1、前期工作:开机、打开浏览器、输入网址(比如:www.python.org)

2、将输入的网址(学名:域名)进行解析

  浏览器会先从客户端系统(也就是你的电脑)查询域名对应的IP地址,如果找到了,浏览器就想这个IP地址发出访问请求;

  如果找不到对应的IP地址(第一次访问这个网站的情况),浏览器就会发起DNS请求,向DNS服务器(专门负责域名解析的服务器)查询IP地址,并保存到你的电脑,这时候浏览器就可以正常向匹配的服务器,发出访问请求了。

3、浏览器发送HTTP请求

  请求信息通过浏览器进行包装,使其符合HTTP协议(应用层),然后通过传输层、网络层、链路层将信息不断处理,最后将处理后的信息传到网络上(上高速),通过网络传送到指定的服务器上,对TCP/IP分层管理感兴趣的可以浏览:,对HTTP感兴趣的可以浏览:。

4、服务器接收到网络上传输来的请求信息

  服务器端通过TCP/IP各层的信息,最终请求信息中获取了:是谁要访问我、它想干嘛(想看文字、图片、视频的页面,还是想从我这下载文件等等)。

  通过服务器判断,同意了客户端的请求,从自己的资源库里(系统文件)里找到相应的资源,或者运行相应的程序,将资源/结果整理成符合HTTP协议的响应信息(携带状态码),准备发回给客户端。

  如果服务器没有同意客户端的请求,或者客户端想要的东西/结果,服务器没有/做不了,那么服务器也会整理一个符合HTTP协议的响应信息(携带状态码),准备发回给客户端。

5、客户端的浏览器通过网络获取到服务器传回的数据,进行解析、渲染后,呈献给我们。

三、附赠:Django的web项目访问流程

生产环境:Linux+Nginx+uWSGI+Django

1、首先客户端请求服务资源,
2、Nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
  如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
  如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;
3、uWSGI 将接收到的包进行处理,并转发给wsgi,
4、wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
5、wsgi将返回值进行打包,转发给uWSGI,
6、uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

*注:不同的组件之间传递信息涉及到数据格式和协议的转换

对Django项目部署感兴趣的,请浏览:

使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识

 

web理论知识--网页访问过程(附有Django的web项目访问流程)的更多相关文章

  1. web理论知识--HTML结构及标签

    一.参考书籍: <Web 前端开发 HTML5+CSS3+jQuery+AJAX 从学到用完美实践> 备注:本书为工具书. 二.HTML5元素: 按功能划分:基础.格式.表单.框架.图像. ...

  2. linux文件访问过程和权限

    第1章 文件访问过程详解 1.1 文件访问过程 第2章 权限 2.1 对于文件rwx含义 r读取文件内容 w修改文件内容 需要r权限配合 只有w权限的时候,强制保存退出会导致源文件内容丢失 x权限表示 ...

  3. Web前端理论知识记录

      Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...

  4. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  5. 用户对动态PHP网页访问过程,以及nginx解析php步骤

    www.example.com | Nginx | 路由到www.example.com/index.php | 加载nginx的fast-cgi模块 | fast-cgi监听127.0.0.1:90 ...

  6. Django学习---Web框架及基础知识

    Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...

  7. 学习FPGA过程中的理论知识

    学习FPGA,先要有数电知识,最好有点C语言,,学好硬件描述语言,verilog或者vhdl.在有这些基础上,做一些小的模块不断积累.这里不再赘述. 下面介绍一下关于FPGA学习过程中的一些理论知识. ...

  8. Winsock网络编程笔记(4)----基本的理论知识

    前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsoc ...

  9. 利用Django进行Web开发

    Web就是用来表示Internet主机上供外界访问的资源的.网页也统称为web资源.Internet上供外界访问的Web资源主要分为如下两类: 静态web资源:指web页面中供人们浏览的数据始终是不变 ...

随机推荐

  1. jvm学习笔记二(减少GC开销的建议)

    一:触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大.更值得关注的是主GC的触发条件,因为它对系统影响很明显.总 ...

  2. 机器学习 - 正则化L1 L2

    L1 L2 Regularization 表示方式: $L_2\text{ regularization term} = ||\boldsymbol w||_2^2 = {w_1^2 + w_2^2 ...

  3. 【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

    #错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错: “未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序” # ...

  4. 金融量化分析【day112】:量化平台的使用-下单函数

    order - 按股数下单 1.代码 # 导入函数库 import jqdata #初始化函数,设定基准等等 def initialize(context): set_benchmark('00030 ...

  5. 第八节:常见安全隐患和传统的基于Session和Token的安全校验

    一. 常见的安全隐患  1. SQL注入 常见的案例: String query = "SELECT * FROM T_User WHERE userID='" + Request ...

  6. C# - LINQ 表达式树

    表达式树(Expression Tree) 表达式树是不可执行的代码,它只是用于表示一种树状的数据结构,树上的每一个节点都表示为某种表达式类型,大概有25种表达式类型,它们都派生自Expression ...

  7. JSP标签和JSTL

    Java的5个标签库:核心(c).格式化(fmt).函数(fn).SQL(sql).XML(x) SQL.XML库不推荐使用 核心标签库(c) //taglib指令 <%@ taglib pre ...

  8. python 的回调函数

    回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.有些库函数(library function)却 ...

  9. nginx日志的监控【转】

    第一:nginx的基础监控: 1.进程监控 2.端口监控 在这里nginx的基础监控就不详细说了,注意的是:这两个是必须要加的.并且对于zabbix而言的话,一定要加上触发器的.有问题必须报警. 第二 ...

  10. 【转】浅析Java中的final关键字

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...