1. 前言
如今一提到服务器首先就想到 apache tomcat nginx等。虽然这些服务器很优秀。但是对于我们平时拿来练手的一些小项目来说却是大材小用,杀鸡用牛刀,而且上述主流服务器配置起来也略嫌麻烦。俗话说自己动手丰衣足食,今天我们就来实现一个简单的静态web服务器。
2. http协议
谈到浏览器,服务器时,作为计算机爱好者,首先想到的就是www、http、https、html等等,那我们就先来了解一下http协议。
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。http协议是一个基于tcp的应用层协议 ,
简单来说当我们在浏览器里输入一个网址访问网页时,就是在使用http协议,比如我们访问 baidu ,当你在浏览器里输入 ‘www.baidu.com’ 后按下回车时,浏览器会自动判断并补全协议 如下图(此处不深究)
那么问题来了,当我们输入www.baidu.com 时浏览器向百度的服务器发送了什么内容呢? 接下来我们借助 “网络调试助手” 来模拟一次浏览器向服务器请求和服务器应答的过程。
网络调试助手基本配置如下图:
我在这里选择了127.0.0.1本机回环地址,端口8080 为大家演示
-
配置好后点击连接。
-
然后打开浏览器输入 http://127.0.0.1:8080
我们看到小圈圈在转,说明正在请求 -
回到网络调试助手,发现在网络数据接受区出现如下内容
4.紧接着我们在发送区输入 HTTP/1.1 200 OK 回车,空一行后 继续输入HelloWorld 点击发送,点击断开,然后返回浏览器,发现小圈圈停止了转动,并在页面显示出了HelloWorld
在这里插入图片描述
5.这就是浏览器也与服务器之间一次简单的请求,应答
一、 http协议请求部分
我们在浏览器打开调试器,重复上述操作,得到如下结果
对比上述红色部分不难看出他们是相同的,而在网络调试助手中的第一句 GET / HTTP/1.1在这三部分中 我们也可以在浏览器的调试器中找到类似的。
- 如GET 对应 请求方法:GET,
- ‘/’ 对应状态代码中最后的 ‘/’ ,以及请求url中最后的‘/’。/ 在这里代表的是访问html在服务器中的路径
- 最后的HTTP/1.1则是HTTP的版本号,比如现在我们使用的就是第1.1个版本
在http协议的请求中: 请求方法 路径 版本号 是构成协议的最基本的,最简单的 也是必须要有的三部分
观察网络调试助手中收到的信息,除了 GET / HTTP/1.1 之外还有一堆东西是怎么来的呢有什么用呢?
其实,剩下的这部分是浏览器根据自身的情况自动生成的,如:
- User-Agent:xxxxxxxxxxxx 这代表访问当前页面使用的浏览器是哪个,以及此浏览器的内核信息等。
- Accept-Language:xxxxxxx 请求头允许客户端声明它可以理解的自然语言,简单说就是浏览器可以识别的语言。
其余的这里就不一一介绍了,但我们可以发现一个规律,就是剩下的这部分都是以 “xxx : xxx” 格式存在的。其实这也是http协议所规定的。
现在我们就可以完整的得出http协议在请求时的格式规定:
- 第一行必须是 请求方法 路径 版本号
- 其余信息皆以 xxx : xxx 的格式 各占一行
二、 http协议响应部分
明白了请求我们接着看看服务器是如何响应浏览器的请求,又是发送了哪些数据给浏览器呢?
之前使用网络调试助手模拟应答时,在发送框内输入了 HTTP/1.1 200 OK 回车 空行后 又输入HelloWorld ,但是浏览器却只