一个简单的服务器

不然我们来做一个——服务器?

  服务器和电脑有什么区别呢?其实基本没什么区别。无非是稳定性高,有网,CPU好(有的服务器可能有128核),然后内存高,基本没有显示器包括显卡,因为不需要。你完全可以把你的电脑配置成一个小型服务器。
  为了更深入的了解服务器的原理,让我们来做一个很简单很简单的服务器吧!
  有了电脑,我们就有了服务器。但是我们还缺了提供HTTP服务的程序。所以我们用脚本来提供HTTP服务。Bash和Node.js都可以,这里我用Node.js。

Node.js服务器

接收请求
1. 进入一个安全的目录,新建文件touch server.js
2. 编辑server.js,直接拷贝这段代码就好了
3. 运行node server或者node server.js。
4. 成功之后,这个server会保持运行状态,如果你要退出的话可以按Ctrl+c(cancel)。但是测试完成之前我不建议你退出。你可以新开一个窗口访问这个服务器。
5. 在新的Bash窗口运行curl http://localhost:你指定的端口/xxx 或者 curl http://127.0.0.1:你指定的端口/xxx
  你可以发现server会打印出你请求的路径。这说明我们新建的server收到了我们用curl发出的请求。但由于server并没有发出响应,所以curl一直在等待,用Ctrl+c中断它。

发出响应
1. 编辑server.js,在中间标注的区域添加两行代码

 response.write('Hello')
 response.end()
  1. 中断之前的server,运行node server.js 8888
  2. 再次使用curl发起请求。你现在可以得到浏览器的响应了。
  3. 我知道你肯定会觉得自己访问自己很奇怪,事实上你可以用手机输入http://你电脑的IP:你指定的端口/xxx来进行测试。

一点点的课外延展
这里是在上边的基础之上做的一些完善
   在上边的步骤中,无论我们输入什么路径,最后得到的结果都是Hello。如果说我只提供根路径的访问,对于其他的访问都拒绝呢?试着加一个判断。

if(path == '/'){
  response.write('Hello');
  response.end();
}else{
  response.statusCode = 404;  //设置状态码为404,表示你所请求的页面不存在
  response.end();
}

  如果我想,得到一个网页呢?把response.write('Hello');里边的字符串Hello改成一个标准的html文档吧!不过如果只是这样的话,当然并没有什么用。你对她进行访问得到的会是源码,因为浏览器并不知道要如何解析它。我们说过,文件后缀并没有什么用。
  所以我们需要一点别的东西。比如————response.setHeader('Content-Type','text/html'),这一段的信息你可以通过运行curl -s -v -- "http://localhost:8888"命令在响应的第二部分看见。作用我们说过了,确定响应的第四部分该如何解析。
  事实上,即使这样,你依旧可能会遇到意想不到的问题,比如乱码。我们都知道乱码是由于两个运行环境编码不一致导致的,要解决也简单。依旧是在Header里边进行设置,只不过这一次设置的是charset。response.setHeader('Content-Type','text/html; charset=utf-8')
  至此,服务器给我们的响应四个部分已经全部可以由我们自行设置。如果你忘了http协议的请求与响应部分的话的话请看这里
- 第一部分:response.statusCode = 404
- 第二部分:response.setHeader()
- 第三部分:回车。。
- 第四部分:response.write()

从URL输入到看见网页发生了什么…

虽然我写过这样一篇博客,但还是忍不住再来一遍。。
1. 输入网址的时候浏览器会先看你的输入缺了些什么,然后再给你补全。比如你输入www.baidu.com,它会给你加上https协议开头,加上默认端口号80,加上默认的根路径/。所以最终的结果其实是https://www.baidu.com/:80.
2. 补全URL之后呢,会查询DNS,向DNS发起询问查IP。
3. 拿到ip之后向服务器的IP地址发起http请求。
4. 然后服务器接收到了请求之后,看你的路径是什么,根据路径给你设置header然后返回html然后结束。
5. 我们将服务器返回的数据下载下来,然后浏览器根据规则将其解析然后我们可以看见。一边解析的时候浏览器会根据link的资源继续发起资源请求。
6. over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值