web 服务器使用 cgi,关于环境变量的疑问

之前都是通过 ssh 来重启服务的,最近想通过浏览器界面重启下服务器上的一个服务,然后接触到了cgi,但是对于里面的环境变量,像 PATH_INFO REQUEST_METHOD SERVER_NAME 等,我有些疑问。

  1. 这些环境变量是局部的吗?我再终端下通过 env 查看,没看到这些环境变量。但是 html 要执行的那个脚本,却可以看到变量跟里面的数据

  2. 通过浏览器同时多个人访问,那这些变量不会冲突?还是说如何做到进程范围的环境变量???

  3. 再就是这个环境变量,是在所执行的脚本结束后,就释放了吗??

这些东西,是web服务器规定的???

我理解应该是web服务器规定的局部变量,在终端下应该看不到。有些变量可能是SESSION范围的,变量的作用域可能只是一个SESSION。

@Schr0dingerCat

有用的链接:

http://www.cgi101.com/book/ch3/text.html

环境变量是服务器发送给每个运行的 CGI 程序的一系列隐藏值。

关于这个“每个运行的 CGI 程序”,Adobe 的网站给出了解释:

https://helpx.adobe.com/coldfusion/cfml-reference/reserved-words-and-variables/cgi-environment-cgi-scope-variables.html

当浏览器请求服务器时,服务器和浏览器创建环境变量。CGI 环境变量囊括了浏览器和服务器间传输的数据,诸如 IP 地址,浏览器类型,用户名等。哪些 CGI 变量可以使用取决于浏览器和服务器软件。

也就是说每个浏览器就是一个 CGI 程序。服务器对多个浏览器接收和发送环境变量。

你的问题:

  1. 这些环境变量是 user session based。出了 CGI 服务器,Linux 主机看不到,不要跟 Linux 本身的环境变量搞混淆了,即使 CGI 环境变量有诸如服务器主机的信息,也是通过 CGI 服务端 passthrough 的。html 能执行脚本是因为浏览器自带的 CGI 程序建立了 user session。

  2. 不是“多人”,是“多浏览器多 session“。即使数据全一样,session ID 肯定不一样。也不是 process scope 的,就是 session scope 的,一个单 process 的 browser 也可以建立多个 session。

  3. 肯定要释放的呀,它就 alive 在这个 browser session 里。标签页关了就没了。

这些东西是 CGI 标准规定的,browser 和 server 都是去实现它。

苏姐V5,谢谢热心大姐姐:smiling_face_with_three_hearts: