一、前言
本文的主要目标是用C++实现一个webServer,但在实现一个WebServer
的前提下,我们首先需要知道什么是WebServer
。
它其实很简单,当你浏览到本页面时,就已经在访问一个webServer
了。
到目前为止,我想你应该对TCP与UDP协议已经不陌生了,并且已经能够用它们进行熟练的编程了。
比如写一个简单的聊天室,应该没问题了吧?如果还不会,本站的其它文章:网络编程详解
一个Web服务器,其本质也是一个服务器,底层使用的协议就是TCP
协议。
也就是说,我们想要手写一个Web
服务器,实际上是在手写一个TCP
服务器而已。
这么一说,是不是就觉得
web
服务器其实也不那么神秘了!
但既然它有了一个新名字,那必然就与普通的TCP
服务器有所差别。
而其差别就在于:web服务器需要遵守一定的规则来 发送/接收 字符串,这个规则就叫做:HTTP
协议
拿一个最简单的例子来说,当你想要看到本页内容,首先就需要先得到本页内容在本站服务器上的路径,也就是当前你的浏览器上方的那个链接。
以这个本站主页链接举例:https://www.kucoding.com/
有了这个链接,将其复制到网址栏,按下回车,你的浏览器就会作为一个TCP
客户端,向本站点的服务器发送一个连接请求。
这里大家可能有个疑问,那就是我们平时编程时都用的ip地址
与端口号
进行连接的,这里也没看到这两个东西呀?
其实是有这两个东西的。
比如IP
地址,浏览器会先发送一个请求获取域名www.kucoding.com
的ip地址,也就是完整链接中间那一段,只是ip
地址对我们来说是不可见的。
而端口,由于http
协议默认为80
端口,https
默认为443
端口,所以也给我们省略了
这个域名怎么来的?那就需要自己去购买了,一般都是几十块一年,购买后,绑定到自己的ip地址,这样你就也能通过域名来访问你的ip地址了。
这里同样提到了另一个https
协议,是在http
的基础上添加了一个s
,即安全层(Secure)
。
因为前面提到了,http
是通过服务器与客户端直接发送一定规则字符串实现的,所以很容易被人拦截直接看到其中传输的内容,因此需要添加一个安全层,也就是先加密,再传输,到达之后再解密。
举个实际的例子,还是以上面那个链接为例,我们可以通过ping
命令获取到本站点服务器的ip
地址:
然后将这个链接前面那串域名替换为这个ip
地址:https://43.134.72.180:443/
并在ip
地址后面添加上了端口号443,中间用:
分隔:43.134.72.180:443
然后直接在浏览器上访问这个链接: