当我们闲暇之余想上网看看新闻,或者看个电影,通常的操作是:打开电脑、打开浏览器、输入网址、浏览页面信息、点击自己感兴趣的连接......那么有没有想过,这些网页从哪里来的?过程中计算机又做了什么事情了?(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项目完整版(二)——部署配置及相关知识

 

最新文章

  1. C++程序员如何转Java
  2. -bash: /bin/rm: Argument list too long
  3. java中一个查询业务的流程
  4. 通过InputStream访问文件中的数据的四种方法
  5. iOS之分别使用代码和storyboard、xib为控件设置圆角(以按钮为例)
  6. XSS的原理分析与解剖(转)
  7. Guava学习笔记:Ordering犀利的比较器
  8. ES6 基础版迭代器
  9. HDU 4460 Friend Chains --BFS
  10. Resumable Media Uploads in the Google Data Protocol
  11. css公共样式,初始化
  12. 安装程序无法初始化。请下载Adobe Support Advisor检测该问题
  13. Java小例子(学习整理)-----学生管理系统-控制台版
  14. 【iOS之轮播视图、自定义UIPageControl】
  15. 网上下载的“上下3D”和“左右3D”影片该如何播放?
  16. POJ 2329 (暴力+搜索bfs)
  17. RPD添加网址、变量
  18. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
  19. Linux安装python3.6
  20. 我为什么要谈KeepAlive(文末增加nginx 负载tcp长连接保持 demo)

热门文章

  1. neutron-删除负载均衡器
  2. A.01.10—模块的输出—PWM高端输出
  3. BZOJ4036 按位或
  4. 快速定位XPATH
  5. ASP.NET WebApi 自带Json返回日期带T无法格式化的问题
  6. [再寄小读者之数学篇](2014-06-23 Gronwall-type inequality)
  7. js打印WEB页面内容代码大全
  8. undefined reference to `pthread_create'
  9. WPF 单个触发器、多个触发器、多条件触发器
  10. JAVA 实现 简单的 HTTP服务器