起因:在看计算机网络时,刚好在Leetcode买了一本《网络是怎样连接的》,越发觉得要看协议的应用、server的实现。
过程:试过python的socket模块还有flask与django,由于语言太过于抽象(高级,不接近底层实现)而造成无法细致理解,故在code-sheep推荐下来读TinyHttpD,同时学习C\Cweb
环境:WSL-2下安装号各种C依赖
参考:https://blog.youkuaiyun.com/freedom1523646952/article/details/104281926 (“”Tinyhttpd实战一:设置虚拟机环境,运行Tinyhttpd“)
先跑起来
-
安装,包,当然gcc gbd build-essential
sudo apt-get update sudo apt-get install geany sudo apt-get install make sudo apt-get install gcc
-
修改makefile文件(根部不懂、好好学一下吧)
all: httpd client LIBS = -lpthread httpd: httpd.c gcc -g -W -Wall -pthread $(LIBS) -o $@ $< client: simpleclient.c gcc -W -Wall -o $@ $< clean: rm httpd
-
htdocs中的cgi文件第一行的#!/usr/bin/perl -Tw 设为虚拟机上的perl位置(用which perl查询)
比如我的就是#!/usr/bin/perl
-
然后修改htdocs中文件权限
cd htdocs sudo chmod 600 index.html sudo chmod 764 color.cgi check.cgi
-
而后在tinyhttpd目录下直接make
如果出现make: Nothing to be done for `all’
则make clean 而后再次make -
运行 ./httpd
最后在浏览器中输入localhost:端口号 -
用宿主的browser访问相应的 localhost 即可
这样,WSL里的TinyHttpDServer就已经跑起来了
Day 2
tinyHttpd
- CGI本意是通用网关接口,实际上是一个生成响应内容的脚本程序。
比如服务器接收到来自服务器的请求,它可以选择把请求传递给一个CGI程序,由它来根据请求生成内容,CGI程序把生成的内容返回给服务器,服务器再把这个内容返回给客户端。服务器程序只负责处理请求,不负责处理内容。 - 我们通过浏览器访问一个网站,会发送http请求给http 服务器,如果请求的是一个静态的页面或图片,服务器会直接返回结果给浏览器。但如果要完成一个动态的请求,比如需要查询数据库这样的操作,服务器会运行一个单独的程序来执行,这个程序处理完成后会把结果转化为服务器(或者浏览器)可以识别的格式输出。
- CGI现在很少使用了,目前主流的webserver技术大多基于JSP
- GCC 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件Gtest。-o选项用来指定输出文件的文件名。