在简单的 http 服务器中处理 CGI 请求

发布于 2024-08-08 13:40:27 字数 112 浏览 8 评论 0原文

我正在用 C 编写一个基本的 http 服务器。处理简单的静态 .html 文件很容易,但我不知道如何处理动态 .pl .cgi 文件扩展名。

我知道我必须使用 exec() 但我的问题是什么?

I am writing a basic http server in C. Handling a simple static .html file is easy but I have no idea how to handle dynamic .pl .cgi file extensions.

I know I will have to use exec() but how is my question?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白鸥掠海 2024-08-15 13:40:27

是的,你应该调用 exec。特别是,您可能想要运行一个 shell,它会找出 cgi 程序是什么类型的脚本(例如 perl、shell 等)或二进制文件,并正确执行它。

通常的顺序是:使用 pipeline 创建一些管道,fork 生成一个新进程,dup2 将 stdin 和 stdout 连接到管道,然后 exec(运行新程序)。

您可能会调用 exec 的 execle 变体。最后一个参数是 cgi 程序的一组环境变量。根据传入请求在 cgi 规范中设置名称值对。它们的名称类似于 REQUEST_METHODQUERY_STRING

接下来,将请求内容写入cgi的标准输入。例如,在 POST 情况下,这将是请求参数字符串。最后,读取标准输出并将其回显到浏览器。

Yes, you should call exec. In particular, you'll probably want to run a shell, which will figure out what kind of script (e.g. perl, shell, etc.) or binary the cgi program is, and execute it properly.

The usually sequence is: create some pipes with pipe, fork to spawn a new process, dup2 to hook up stdin and stdout to the pipes, and exec (to run the new program).

You'll probably be calling the execle variant of exec. The last parameter is a set of environment variables for your cgi program. Set up the name value pairs in the cgi spec based on the incoming request. These will have names like REQUEST_METHOD and QUERY_STRING.

Next, write the request content to the cgi's standard input. This will be the request parameter string in the case of POST, for example. Finally, read the stdout and echo it back to the browser.

柠栀 2024-08-15 13:40:27

HTTP 服务器的作用是实现 HTTP 协议(​​本质上是位于 TCP/IP 之上的通信协议),

支持 .pl、.cgi 等是应用程序服务器的作用。有很多很好的例子。例如,在 Ruby on Rails 中,您可以使用 Web 服务器(Apache/nginx)并在这些服务器后面运行 Ruby 解释器(实际上,它会处理内部嵌入了 Ruby 代码的 HTML)

。您确实需要弄清楚您的目标是什么。

The role of HTTP server is to implement HTTP protocol (essentially communication protocol sitting on top of TCP/IP)

Supporting .pl, .cgi, etc is a role of the Application Server. There are many good examples. For example in Ruby on Rails you can use web servers (Apache/nginx) and run ruby interpreters behind those (which in fact will process HTML with embedded Ruby code inside)

You really need to figure out what is your goal.

世界等同你 2024-08-15 13:40:27

请查看 CGI 规范。特别是第 4 节“调用脚本”和第 6 节“CGI 脚本的数据输入”。您需要设置要读取的 cgi 脚本的环境变量(QUERY_STRING、SCRIPT_NAME 等)。这让你无法继续前进。

Take a look at the CGI Spec. Specifically sections 4 "Invoking the Script", and section 6 "Data Input to the CGI Script". You will need to set environment variables for the cgi script to read ( QUERY_STRING, SCRIPT_NAME, etc). This outta get you going.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文