Python实现简单Web服务器及模拟浏览器
一、基础知识简介
(1)ip地址和域名
- 域名(Domain name):可以理解为一个网址,一个特殊的名字。
- 意义:IP不方便记忆,于是有了域名。
- 构成:字母、数字、中划线(.),长度小于等于255个字符。
下面是一些常用域名后缀及其含义:
域名 | 含义 |
---|---|
.com (商业/公司) | 表示商业、公司、企业。.com是目前国际较广泛流行的通用域名格式,现全球用户超过1.1亿个。 |
.net(网络) | .net 域名诞生于上世纪80年代。.net 域名一般用于从事 Internet 相关的网络服务的机构或公司。 |
.org(组织) | .org 域名是全球第三大国际顶级域名,其历史可以追溯到 1985 年,当时最先引入了 .org 域名和其他六个域名(.com,.us,.edu,.gov,.mil 和 .net),意思是 Organizations(组织) |
.gov(政府) | .gov.XX:由于 .gov 域名是美国政府专用域,其他国家的政府无法注册和使用 .gov 域名,所以其他国家使用 .gov+自己的国别/地区域 的方式作为权威政府域名。 |
.edu(教育) | .edu(education,教育)域名主要供教育机构使用,如大学等院校使用。 |
.cn(中国国别域名) | .cn 域名属于国家地区顶级域名,CN 是 ISO Code,代表中国。 |
(2)DNS服务器
-
DNS(域名解析系统)用于将域名转成对应的IP地址,DNS是一台运行在互联网上的服务器。
-
浏览器访问DNS服务器的过程:
简单来说就是浏览器拿着域名去找DNS服务器,然后DNS会返回给浏览器该域名对应的IP,浏览器再拿着IP去进行访问。
所以浏览器真正访问的对象是IP地址。
但是浏览器在访问DNS之前会首先访问本地DNS缓存,也就是hosts文件,如果没有找到对应的IP,浏览器才会访问DNS。
(3)HTTP协议
- 简介:
超文本传输协议(Hypertext[ Transfer Protocol](https://baike.baidu.com/item/ Transfer Protocol/612755?fromModule=lemma_inlink),HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。
2.工作原理:
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
具体如下图所示
(4)HTTP协议格式查看
HTTP 协议格式分为请求格式和响应格式
请求报文格式如下:
请求行、请求头、请求空行、请求主体
- 请求行包括:请求方式、请求路径、请求版本
- 请求头包括:host,accept-encoding,cookie等
- 只有在post方式才有请求主体
我们还要先讨论一下请求路径的格式,因为这将涉及到后面资源路径的解析
请求行如下:
GET / HTTP/1.1
GET是请求方式
/ 是请求路径,这里是根目录。根目录是指web服务器所在的目录。
比如 /a/b/index.html 这个路径是指根目录–a文件夹–b文件夹–index.html 。那么我们的任务就是根据这个路径找到相应的资源文件。
响应报文格式如下: