HTTP服务动态内容--get post

本文详细探讨了HTTP请求中客户端如何通过GET和POST传递参数给服务器,以及服务器如何通过CGI(通用网关接口)将这些参数传递给子进程。CGI定义了一系列环境变量,使得子进程能够获取必要的信息。子进程通过标准输出将动态内容发送回客户端,对于POST请求,还需要重定向标准输入。CGI程序负责生成响应头,包括Content-type和Content-length。
摘要由CSDN通过智能技术生成

在这篇博文中  https://blog.csdn.net/JachinYang/article/details/117329769  我们讨论了有关HTTP的基础知识,也谈到了什么是服务静态内容和服务动态内容,如果我们停下来考虑一下,就会发现一些问题,例如,客户端如何将程序参数传递给服务器?服务器如何将这些参数传递给它所创建的子进程?服务器如何将子进程生成内容所需要的其他信息传递给子进程?子进程将他的输出发送到哪里?

CGI:通用网关接口,解决上述问题。

目录

1、客户端如何将程序参数传递给服务器

2、服务器如何将这些参数传递给它所创建的子进程

3、服务器如何给子进程将其他信息传递

4、子进程将它的输出发送到哪里


1、客户端如何将程序参数传递给服务器

GET请求的参数在URI中传递。POST请求的参数在请求主体中传递。如下是一个GET请求形式:

如上 一个" ? " 字符分割了文件名和参数,而每个参数都用一个“ & ”字符分隔开。参数中不允许有空格,而必须用字符串“ %20 ”来表示。

2、服务器如何将这些参数传递给它所创建的子进程

服务器在收到上图所示的请求后,它会调用fork函数来创建一个子进程,并调用execve在子进程的上下文中执行/cgi-bin/adder程序。像adder这样的程序,通常称之为CGI程序,因为他们遵守CGI标准的规则。在调用execve之前,子进程将CGI环境变量QUERY_STRING设置为" 1500&213 ",adder程序在运行时可以利用Linux getenv函数来引用他。

3、服务器如何给子进程将其他信息传递

CGI定义了大量的其它环境变量,一个CGI程序在它运行时可以设置这些环境变量。下面展示了其中一部分环境变量:

4、子进程将它的输出发送到哪里

一个CGI程序将它的动态内容发送到标准输出。在子进程加载并运行CGI程序之前,它使用Linux dup2函数将标准输出重定向到和客户端相关联的已连接描述符。因此,任何CGI程序写到标准输出的东西都会直接到达客户端。

注意:因为父进程不知道子进程生成的内容的类型和大小,所以子进程就要负责生成响应报头里面的Content-type和Content-length,以及终止报头的空行。

旁注:对于post请求,子进程也需要重定向标准输入到已连接描述符。然后,CGI程序会从标准输入中读取请求主体中的参数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值