HTTP服务器开发
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
实例
GET / HTTP/1.1\r\n |
HTTP 响应头信息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
判断请求的资源是否存在
stat函数
作用:获取文件的状态信息,其中st_mode
可以用来判断文件类型
pipe与CGI
pipe
int fields[2]; |
dup2
int dup2(int file_id1, int file_id2);
复制文件描述符file_id1到file_id2,file_id2如果存在则关闭file_id2
作用:使得file_id1和file_id2有共享的文件偏移量和文件状态,pipe和dup2两者配合,可以实现进程的通信。
GGI
CGI是Web服务器和一个独立的进程之间的协议,它会把HTTP请求Request
的Header
头设置成进程的环境变量,HTTP请求的Body
正文设置成进程的标准输入,进程的标准输出设置为HTTP响应Response
,包含Header
头和Body
正文。
工作概要:对于一个CGI程序,主要的工作是从环境变量和标准输入中读取数据,然后处理数据,最后向标准输出中输出数据。
execl
作用:原先fork()创建出来的进程是与原先的父进程共享代码段,使用execl后,可以将子进程替换成一个指定的程序。
int execl(const char *path, const char *arg, ...) |
第一参数path字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]… 最后一个参数须用空指针NULL作结束。
通常第一个参数为程序名
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Felix's Footprint!
评论