TinyHttpd运行日志
2020-12-11 本文已影响0人
StevenHD
execl(path, path, NULL)
- 更改accept_request()中的函数
GET的报文格式——
GET
setsockopt()
必须在bind()
之前,不然就没用了
动态申请端口号——
动态申请端口号
http短连接——
短连接
- 短连接:一次请求 + 一次响应,然后就会关闭套接字
stat结构体——
stat结构体可以用来获取`文件的属性`
- cgi表示是否执行CGI文件
- query_string表示指向
请求行URL
中参数的位置
- get_line()函数——读一行出来,核心是【处理
\r\n
】
getline()函数
-
读取到
\r
的时候,看看后面是不是\n
;如果是\r
,那么就完整地读取出来。如果不是,就把\r
替换成\n
,然后就可以通过while退出循环,然后末尾加上个\0
就结束。 -
请求头——
请求头
-
- 截取出
请求方法
- 截取出
- 501,一般
5
开头表示是服务器
的问题
- 501,一般
-
请求路径(请求资源)——
GET后面的`/`就是`请求路径`
-
- 如果发现
请求的文件
不存在,那么还是要做的是把缓存区剩余的内容
都读出来,读完的标志是读取到一个空行
——
stat返回-1的情况
index.html
文件是没有执行权限的。
- 静态文件只需要
打开-->读取-->发送
,但是CGI是需要执行
的。CGI是一个接口
,让web服务器可以调用其他外部程序的接口
标准输入
与【CGI解析器】和标准输出和标准错误
——
- 创建第一个管道——CGI的输入
- 创建第二个管道——CGI的输出
- fork出一个子进程
服务器进程写入,CGI进程读出;CGI进程写入,服务器进程读出
- 重定向
读端
到标准读入
(将原先的文件描述符
关掉) - 重定向
写端
到标准写出
(将原先的文件描述符
关掉) - 从而建立了
父子进程之间通信的2条管道
通过标准输入传递信息
- 也可以通过
环境变量
来传递头域信息
——
环境变量
一、GET方式请求CGI
-
需要把
GET请求报文
除了【第一行】以外的都丢弃
掉 -
CGI的头域——
头域
-
第一行不是注释,而是
color.sh指定解析器的位置
——
-
GET中的URL带有
参数
-
将
URL/color.sh?color=blue
解析成路径/color.sh
和参数color=blue
,将?
变成了\0
-
QUERY_STRING
这个环境变量的值就是color=red
,需要解析出red
-
通过
color.sh
文件的书写,可以解析这样的URLhttp://127.0.0.1:4000/color.sh?color=purple