之前都是通过 ssh 来重启服务的,最近想通过浏览器界面重启下服务器上的一个服务,然后接触到了cgi,但是对于里面的环境变量,像 PATH_INFO REQUEST_METHOD SERVER_NAME 等,我有些疑问。
-
这些环境变量是局部的吗?我再终端下通过 env 查看,没看到这些环境变量。但是 html 要执行的那个脚本,却可以看到变量跟里面的数据
-
通过浏览器同时多个人访问,那这些变量不会冲突?还是说如何做到进程范围的环境变量???
-
再就是这个环境变量,是在所执行的脚本结束后,就释放了吗??
这些东西,是web服务器规定的???
xzhao
(xzhao)
2
我理解应该是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 程序。服务器对多个浏览器接收和发送环境变量。
你的问题:
-
这些环境变量是 user session based。出了 CGI 服务器,Linux 主机看不到,不要跟 Linux 本身的环境变量搞混淆了,即使 CGI 环境变量有诸如服务器主机的信息,也是通过 CGI 服务端 passthrough 的。html 能执行脚本是因为浏览器自带的 CGI 程序建立了 user session。
-
不是“多人”,是“多浏览器多 session“。即使数据全一样,session ID 肯定不一样。也不是 process scope 的,就是 session scope 的,一个单 process 的 browser 也可以建立多个 session。
-
肯定要释放的呀,它就 alive 在这个 browser session 里。标签页关了就没了。
这些东西是 CGI 标准规定的,browser 和 server 都是去实现它。