近期准备session,希望能跟大家轻松地分享一些东西,一些常见的场景。比如:web后台服务器到底是如何工作的。

上网过程对于普通人:首先,他需要一台电脑,然后,他的电脑可以接入网络,最后,他可以打开浏览器键入自己想要浏览的网址,然后就可以上网了。但是对于计算机来讲,是一个比较复杂的过程,里面包含了信息如何保存,信息如何传递以及信息如何展示的过程。所以,针对整个上网过程,我们从前到后,分析一下其中包含的各种技术细节,可能不全,目的是抛砖引玉,希望大家在简单的流程当中学习更多的东西分享出来,一些基础知识则当做复习。之前buddy王老吉讲过浏览器的工作方式,所以本文内容不包含浏览器的工作方式,重点在于各种后台服务以及通信层面的分析。

URL

前面说到,用户浏览器中键入网址便浏览网页信息,这个网址实际上就是URL,英文全称是Uniform Resource Locator——统一资源定位符。

统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

完整的、带有授权部分的普通统一资源标志符语法看上去如下:

协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值

协议部分可以是http,https,ftp等协议类型。

协议

前面提到,互联网上的每个文件都有一个唯一的URL,那么,到底是如何确认的。前面提到了协议,协议是什么?比如大家写信时都需要写邮编、地址和姓名,便可以通过这种方式将信邮寄到世界上唯一的那个人手里,填写的邮编,地址和姓名就是一种协议。协议的价值在于世界上所有的浏览器和后台服务器都需要遵循http这些协议,才能正常进行信息的传递。

计算机通信跟人的通信是类似的,也是遵循各种协议的,不同的协议承载着不同的功能。通常,浏览器上网使用的是http或者https协议,从网络分层的角度来讲,这些协议属于应用层协议,建立在传输层之上。传输层跑是什么协议呢?相信大家都非常熟悉,传输层跑的是TCP和UDP协议,再往下就是网络层,网络层上面跑的是IP数据报。每层的功能各不相同,每层的协议也不同,但是一般来讲,越往下层,协议会越少,这样才能化繁为简,从而支持不同的上层协议。传输层协议一般是由操作系统层面支持的,同时还需要跟网络层进行交互(对于物理机来说就是网卡),所以针对我们操作系统之上的程序员来讲,新创造的协议都是应用层协议,因为我们的通信都是在传输层(TCP和UDP)基础之上构建的。

http协议

http是应用层协议,也就是说,在界面敲下网址那一刻,实际上浏览器向服务器发送了http协议格式的消息,也叫做http请求。http协议是构建在tcp协议之上的,而tcp是可靠的协议,所以http协议无需考虑可靠性,只管传输就可以了。

http协议比较简单,如下所示:

那么浏览器又是如何组织http请求,并且将信息发送的相应服务器的呢?例如:http://www.baidu.com

DNS服务

我们键入的仅仅是服务器域名,但是实际上在网络中我们通信是通过套接字来进行通信的。套接字=IP + 端口,在网络中,IP的作用是用来在网络层进行路由寻址,寻找唯一的主机;端口的作用是用来在这个主机中寻找唯一的进程。总体来说,套接字可以用来在网络中确定唯一主机的唯一进程,所以通过套接字我们可以进行通信。

但是问题是上网通过域名来访问,那么是如何通过域名来确认唯一主机的唯一后台web服务器进程的呢?做一个假设,如果我们可以在互联中提供一个确定的服务,这个服务里面装有域名到套接字的映射,上网的人通过这个服务获取对应域名的套接字,那么这个问题不就解决了。而实际上,DNS服务原理简单来说就是刚才假设的方法,服务商通过提供公共的DNS服务,大家上网时便可以查询到相应域名对应的套接字,通过这个套接字便可以访问确定的服务器了。真正的DNS服务其实更为复杂,分为迭代式查询和递归式查询,两种方式各有优劣,同时,为了性能,DNS服务通常也配有不同级别的缓存,关于DNS的具体实现有兴趣的可以自行查询资料学习。

总结一下,上网时浏览器实际上做了两件事,第一,通过浏览器内置的DNS客户端,向DNS服务器发送请求,获取域名对应套接字;第二,使用套接字发送http请求,获取数据,然后在浏览器端呈现。

另外,DNS服务也需要遵循某种协议才能通信,其协议为DNS协议,其服务固定为53端口,属于应用层协议。DNS英文为DomainNameSystem。其实DNS服务跟电话簿的工作方式一样,因为你没法记得每个人的电话号码,但是很容易记住每个人的名字。

后台服务器

上网前,我们的计算机里面什么都没有,为何键入网址后能在界面显示出各种各样的数据?实际上,数据都来自于后台服务器,所有的数据当然也都存储在后台服务器,浏览器仅仅请求数据。前面讲了,请求数据时,使用套接字加上http请求来获取数据,后台则必定要提供相应的套接字,接收信息,解析http请求,才能正常的返回客户端需要的数据。所以,后台服务器做的工作,第一,绑定套接字,通过该套接字向外提供http服务;第二,解析http请求,根据请求返回响应。

http服务器实现

理论上讲,我们可以实现自己的http服务,并且解析不同的http请求,返回响应。但是,作为开发者来讲,重复造轮子是不推荐的,市面上有多种现成框架供我们选择。对于java开发者来讲,就有tomcat或者jetty,其他语言理论上也有类似的框架。tomcat和jetty帮我们做了什么呢?实际上最主要的功能还就是接受http请求,针对不同的请求返回响应,当然,他们也提供了更多的高级特性,比如遵循servlet规范,使人们更高效的开发web应用。

总结

总结一下,上网的实际流程在程序员的角度来看,首先需要通过DNS服务解析域名,获取该域名所在web服务器应用程序的套接字,然后浏览器组装符合http协议的请求,通过套接字发送给web服务器,web服务器解析请求,根据解析结果将需要返回的内容组装符合http协议的响应,浏览器接到响应后,根据http协议解析响应,获取数据,将数据展示在浏览器上。

包含的知识点:DNS协议,HTTP协议,计算机网络知识,后台服务器实现(tomcat/jetty等)。

网络订票后台服务器的作用,web后台服务器是如何工作的相关推荐

  1. 12306网络订票系统

    醒目1:12306出台了"输入密码错误次数大于x次就锁定账号"导致当日无法登陆的举措,请同学们在使用脚本登陆的时候一定不要输错密码-- 醒目2: 12306更新了后台的登录程序,现 ...

  2. 管理系统中计算机应用第二章思维导图,第二章 项目范例:剖析网络订票系统 课件(15张PPT)...

    第二章 项目范例:剖析网络订票系统 课件(15张PPT) 2.1 信息系统及其组成 2.2 信息系统的功能 2.3 信息系统中的计算机和移动终端 第二章 信息系统的组成与功能 教材p29-p33 信息 ...

  3. 铁客网络订票系统 铁客订票 12306

    [12306] 铁客网络订票系统 铁客网络订票系统是由软件作者开发,基于铁路客户服务中心(官网http://www.12306.cn)的一款网络在线订购火车票的客户端程序. 功能简介: 1.车票预订自 ...

  4. 网络订票当心三类陷阱 最好当场识别真伪

    春节将至,学生放假.公司职工回家过年,导致火车站.机场人流量激增,网上订票由于其操作简单受到了不少人的青睐,但是网络订票诈骗现象比较突出,提醒大家网上订购车票时一定要慎重. 据介绍,骗子主要有以下诈骗 ...

  5. 12306网络订票系统登录提示解决方案

    关于铁道部12306网络订票系统登录提示解决方案 介于2012年春运拉开帷幕,很多人选择了网络购票和电话订单,可是由于铁道部12306网络点击量过大,好多人根本无法登录系统进行网购:为保障农民朋友按时 ...

  6. jsp mysql火车票预定系统_火车票网络订票售票系统的设计与实现(NetBeans,MySQL)

    火车票网络预订售票系统的设计与实现(NetBeans,MySQL)(任务书,开题报告,中期检查表,文献综述,毕业论文16000字,程序代码,MySQL数据库) 本文针对火车站的售票实际情况,按照软件工 ...

  7. 服务器的作用及用途,服务器的作用与用途是什么呢

    原标题:服务器的作用与用途是什么呢 服务器是一个管理资源,并且可以为用户去提供服务的计算机的设备,大家可以这么简单的理解,由于这种类型的产品的响应服务是需要有请求的时间的,然后才需要去进行处理,一般来 ...

  8. 宽带服务器的作用是什么,服务器的作用是什么

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 服务器的作用如下: 1.服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器.数据库服务器和应用程序服务器.运行以 ...

  9. nat服务器的作用,nat虚拟服务器(tp路由器虚拟服务器能干嘛)

    那么虚拟服务器功能的区别呢?还有可网管的路由器中的NAT的区别 [h3c-. NAT:将私有IP转换成公网IP,让内网的计算机能访问互联网,但不能像楼主说的能将内网的FTP面向INTERNET.因为互 ...

最新文章

  1. Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解
  2. python全栈简介_Python全栈(一)编程语言介绍
  3. “最少惊讶”和可变默认参数
  4. 当对象与原型有相同的属性,调用时的上下文指向问题
  5. SpringBoot加itext实现PDF导出
  6. CF div2 PA 2019.02.17
  7. java中isolate时间_flutter/dart里面,一个isolate一般heap多大?
  8. python opencv轮廓检测_OpenCV 轮廓检测的实现方法
  9. hadoop--HDFS_NameNode和SecondaryNameNode工作机制
  10. 深入理解 gRPC 协议--理解protobuf/.proto/http2
  11. mysql 导入1045错误_解决MyQL数据库中1045错误的方法——Windows系统
  12. C# 图片预览打印方法
  13. php 鼠标 移动 手型,JS实现的鼠标跟随代码(卡通手型点击效果)
  14. 智慧灯杆(路灯)控制系统平台架构的主要设备有哪些?
  15. vs2019 C#提示程序未兼容
  16. Android 几个ApplicationInfo Info系列类的总结
  17. xampp is currently only availably as 32 bit applic
  18. composer 安装laravel 5.5 苹果终端
  19. web开发之长度单位:px, pt, rem, vw, vh
  20. 混淆的C代码竞赛2006.请解释sykes2.c

热门文章

  1. 直播预告 | 阿里巴巴自研代码管理平台技术解密
  2. unity3d shader的软高光的金属效果
  3. 宝塔面板安装织梦dedecms
  4. 简述计算机在材料学中的应用,计算机在材料学中的应用
  5. html语言空格怎么写,html中如何插入空格字符代码的6种书写方法
  6. Wannafly交流赛1_B_硬币【数学】
  7. Solving environment: failed with initial frozen solve. Retrying with flexible solve. PackagesNotFoun
  8. Iptables 基本设置指南
  9. 使java方法全部折叠_Intellij IDEA中一次性折叠所有Java代码的快捷键设置
  10. Java Sleep的替换方法