Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 如何区分来自命令行和浏览器的请求?_Http_Curl_Apache2 - Fatal编程技术网

Http 如何区分来自命令行和浏览器的请求?

Http 如何区分来自命令行和浏览器的请求?,http,curl,apache2,Http,Curl,Apache2,要检查它是cli还是http请求,在PHP中可以使用此方法PHP\u sapi\u name。我试图在apacheconf文件中复制它。其基本思想是,如果请求来自cli,则会提供“最小信息”,如果请求来自浏览器,则会将用户重定向到不同的位置。这可能吗 我的伪代码: IF (REQUEST_COMING_FROM_CLI) { ProxyPass / http://${IP_ADDR}:5000/ ProxyPassReverse / http:/

要检查它是
cli
还是
http
请求,在PHP中可以使用此方法
PHP\u sapi\u name
。我试图在apacheconf文件中复制它。其基本思想是,如果请求来自cli,则会提供“最小信息”,如果请求来自浏览器,则会将用户重定向到不同的位置。这可能吗

我的伪代码:

IF (REQUEST_COMING_FROM_CLI) {
  ProxyPass          /      http://${IP_ADDR}:5000/
  ProxyPassReverse   /      http://${IP_ADDR}:5000/
}ELSE IF(REQUEST_COMING_FROM_WEB_BROWSERS){
  ProxyPass          /      http://${IP_ADDR}:8585/welcome/
  ProxyPassReverse   /      http://${IP_ADDR}:8585/welcome/
}

添加:使用不同协议的主机,包括http、ftp和telnet。apache能否确定请求是来自cli还是浏览器

因为据我所知,使用apache无法找到区别

如果命令行的请求设置正确,apache无法区分命令行和浏览器

当您在PHP中检查它时(如您所建议的,使用PHP_sapi_名称),它只检查PHP本身从何处调用(cli、apache等),而不是http请求从何处发出

使用telnet作为命令行,您可以连接到apache,设置所需的http头并发送请求,就像使用浏览器一样(仅浏览器为您设置头)


因此,我认为apache无法区分控制台和浏览器,因为据我所知,使用apache无法找到区别

如果命令行的请求设置正确,apache无法区分命令行和浏览器

当您在PHP中检查它时(如您所建议的,使用PHP_sapi_名称),它只检查PHP本身从何处调用(cli、apache等),而不是http请求从何处发出

使用telnet作为命令行,您可以连接到apache,设置所需的http头并发送请求,就像使用浏览器一样(仅浏览器为您设置头)


因此,我认为apache无法区分console和browser

如果cli请求没有欺骗用户代理标头中的真实浏览器,则可以使用BrowserMatch指令。否则,就像其他人所说的那样,无法区分两者之间的区别。

如果cli请求没有在用户代理标头中欺骗真实浏览器,则可以使用BrowserMatch指令。否则,就像其他人所说的那样,没有办法区分两者之间的区别。

唯一的方法是测试在请求头中发送的用户代理,但这些信息可以很容易地更改

默认情况下,apache服务器上的每个php http请求都是这样的:

192.168.1.15--[01/Oct/2008:21:52:43+1300]“GET/HTTP/1.0”2005194“-”

此信息可以很容易地更改为类似浏览器的外观,例如使用

ini\u集('用户\u代理', ‘Mozilla/5.0(Windows;U;Windows NT 6.0;en-GB;rv:1.9.0.3)Gecko/2008092417 Firefox/3.0.3’

http请求将如下所示

192.168.1.15--[01/Oct/2008:21:54:29+1300]“GET/HTTP/1.0”200 5193 -“Mozilla/5.0(Windows;U;Windows NT 6.0;en-GB;rv:1.9.0.3)Gecko/2008092417 Firefox/3.0.3”

此时,apache会认为收到的连接来自windows firefox 3.0.3


因此,没有确切的方法获取此信息。

唯一的方法是测试在请求头中发送的用户代理,但此信息可以轻松更改

默认情况下,apache服务器上的每个php http请求都是这样的:

192.168.1.15--[01/Oct/2008:21:52:43+1300]“GET/HTTP/1.0”2005194“-”

此信息可以很容易地更改为类似浏览器的外观,例如使用

ini\u集('用户\u代理', ‘Mozilla/5.0(Windows;U;Windows NT 6.0;en-GB;rv:1.9.0.3)Gecko/2008092417 Firefox/3.0.3’

http请求将如下所示

192.168.1.15--[01/Oct/2008:21:54:29+1300]“GET/HTTP/1.0”200 5193 -“Mozilla/5.0(Windows;U;Windows NT 6.0;en-GB;rv:1.9.0.3)Gecko/2008092417 Firefox/3.0.3”

此时,apache会认为收到的连接来自windows firefox 3.0.3


因此,没有确切的方法来获取这些信息。

是的,我认为OP没有看到所有内容都是简单的HTTP协议,可以是图形浏览器、cli浏览器、telnet等等。。。相同的协议,没有区别。是的,我认为OP没有看到所有的东西都是简单的HTTP协议,可以是图形浏览器、cli浏览器、telnet等等。。。相同的协议,没有区别。php_sapi_name并不像您想象的那样。它只是区分PHP与Web服务器的通信方式,无论是直接通信(命令行PHP解释器)还是通过mod-PHP之类的方式。PHP_sapi_名称的可能重复并不像您认为的那样。它只是区分PHP如何与Web服务器通信,是直接通信(命令行PHP解释器)还是通过mod-PHP之类的方式