当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑、打开浏览器、输入网址、浏览页面信息、点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了?(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. emwin 之模态窗口

    @2019-02-27 [小记] emwin 窗口被模态之后,创建子窗口则原模态窗口变为非模态

  2. (二分查找 拓展) leetcode278. First Bad Version

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...

  3. 2.11 while循环的嵌套以及应用(难)

    while循环嵌套 前面学习过if的嵌套了,想一想if嵌套是什么样子的? 类似if的嵌套,while嵌套就是:while里面还有while <1>while嵌套的格式 while 条件1: ...

  4. 程序设计-理解java继承-遁地龙卷风

    (0)写在前面 编程和现实世界是息息相关的,你是如何理解现实世界中的继承呢? 继承在编程中应理解为:对父类资源(本文只讨论方法)的使用,父类方法只提供类基本的功能,父类方法之间不存在调用关系. (1) ...

  5. 【Java编程思想笔记】反射

    文章参考:学习网站 how2java.cn 参考博客:(敬业的小码哥)https://blog.csdn.net/sinat_38259539/article/details/71799078 (青色 ...

  6. php7 + 新特性 部分

    三目运算符: 以前:$type = isset($_GET['type']) ? $_GET['type'] : '测试'; php7.0: $type = $_GET['type'] ?? '测试' ...

  7. SQL server 存储过程中 列传行

    select @exchange=exchange,@coupons_type=coupons_type - FLOOR(exchange))) from points_exchange_svc wh ...

  8. Basic Calculator I && II && III

    Basic Calculator I Implement a basic calculator to evaluate a simple expression string. The expressi ...

  9. TCP-IP详解学习笔记2

    TCP-IP详解学习笔记2 链路层 链路层的目的是为IP模块发送和接收IP数据报: TCP/IP支持多种不同的链路层,依赖于使用网络硬件类型:有线局域网(以太网,城域网(MAN),有线语音网络).无线 ...

  10. Solidity属性和方法的访问权限

    属性:默认是internal的类型,外部是不可以访问调用的,如果加上public的话,那么是会自动为这个属性加上一个get的方法的,比如uint   public _age; => functi ...