HTTP服务器(二)

基于CGI实现简易HTTP服务器(HTTP/1.0版本)

  • HTTP协议是基于TCP协议的通信协议,因此,实现服务器的第一步是至少实现两个主机不同进程间TCP通信
  • 当服务器收到请求后,首先分析请求方法(method 为POST || GET方法)
  • 当方法确定后,获取请求的URL,这一步是为了后边处理GET方法和POST方法(CET方法和POST方法参数位置不同,GET参数在URL中用指针指示标识,POST方法在请求正文中用正文长度content_length标识)
  • 判断资源是否存在,如果存在,判断这个资源是一个目录,普通文件,还是一个可执行程序。
    GET方法:如果没有参数,就直接将请求的资源以html各式返回给客户端;否则进入excute_cgi运行CGI程序的处理
    POST方法:进入excute_cgi运行CGI程序处理; 因为只要是POST方法就支持CGI,否则出错返回500
  • 返回各自情况对应的报文
  • 关闭与客户端的连接就是完成了一次HTTP请求与回应,因为HTTTP是无连接的
    在这里插入图片描述

(橙色标注线条为概括性的总流程)

运行excute_cgi时首先从客户端发来的报文读取参数。

建立两个管道cgi_input和cgi_output,然后根据需要fork出一个子进程通过管道进行CGI部分的处理

父进程通过环境变量的形式将参数转交给子进程,子进程运行完成后,将结果交给父进程,父进程再将数据输送给客户端。

具体内部:

父进程:

  • 创建两个管道,并关闭相应的文件描述符
  • POST方法:继续读取数据,直到读完POST参数部分
  • GET方法:直接从子进程读取结果
  • 将数据和方法全部交给子进程后等待子进程的结果(方法决定读取顺序)

子进程:

  • 关闭管道的适当文件描述符
  • 对标准输入输出进行重定向
  • 通过环境变量传递参数
  • 进行execl程序替换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ HTTP服务器是一个用C++编写的程序,用于处理HTTP请求和响应。它可以接收来自客户端的HTTP请求,并根据请求的内容生成相应的HTTP响应。在给定的引用代码中,我们可以看到一些关于C++ HTTP服务器的实现细节。 引用\[1\]中的代码展示了一个简单的C++ HTTP服务器的主要功能。它首先检查命令行参数的数量,如果不是2个,则调用Usage函数打印用法信息并退出。然后,它将第个命令行参数转换为整数作为服务器的端口号。接下来,它创建一个HttpServer对象,并调用Loop函数启动服务器。 引用\[2\]和引用\[3\]中的代码展示了一个名为EndPoint的类,它是HTTP服务器的一个组成部分。它包含一个套接字、一个HttpRequest对象和一个HttpResponse对象。在这个类中,有一些私有函数用于解析HTTP请求报头、处理错误等。 总的来说,C++ HTTP服务器是一个用C++编写的程序,用于处理HTTP请求和生成HTTP响应。它可以通过解析请求报头、处理请求内容和生成响应报头来实现这些功能。 #### 引用[.reference_title] - *1* *2* *3* [【C++】搭建HTTP服务器](https://blog.csdn.net/m0_64560763/article/details/128131061)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值