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之类的方式