我正在测试 Apache 服务器。通常我会x.x.x.x/directory/index.php
在 Firefox 中打开,然后阅读httpd/error_logs
并排除故障。
我的问题是,如果我的测试系统上没有 Web 浏览器(例如 Chrome/Firefox),该怎么办?我该如何通过终端进行等效测试?我试过了,ping x.x.x.x/directory/index.php
但不行。
答案1
我的问题是,如果我没有打开 Chrome/Firefox 怎么办?我如何通过终端进行等效测试?我试过了,
ping x.x.x.x/directory/index.php
但不起作用。
使用ping
永远不会工作。它ping
所做的只是从网络地址发送/接收 ICMP 数据包。因此,在您的示例中,您唯一可以“ping”的是ping x.x.x.x
URL 的其余部分(/directory/index.php
)ping
在尝试解析所有的URL 就像主机名一样。错误可能类似于:
ping: cannot resolve x.x.x.x/directory/index.php: Unknown host
但对于您正在寻找的特定类型的 Web 服务器测试/调试,我通常使用curl
但具体来说,我使用的curl -I -L
只会返回基本响应标头并遵循服务器可能已设置的任何位置重定向;标志-I
告诉curl
仅显示标头,-L
标志告诉curl
遵循它遇到的任何服务器重定向。
例如,如果我curl -I -L
在 上运行此命令google.com
:
curl -I -L google.com
我收到以下响应标头:
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Aug 2015 02:16:32 GMT
Expires: Wed, 23 Sep 2015 02:16:32 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
HTTP/1.1 200 OK
Date: Mon, 24 Aug 2015 02:16:32 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1440382592:LM=1440382592:V=1:S=5ToXkoBHyK2BAjyf; expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.com
Set-Cookie: NID=70=VKM1D8HeCMlye1YjMDYSqPlyIpPHKkitAor--wiqYznamENfNig69ZBW5oBgIR7wOFzVaUB6i4WKj-tqa2WcqbOCeVTc0hB4xQWQzBxpNazPp_20dBiU4in0wIop8mhz; expires=Tue, 23-Feb-2016 02:16:32 GMT; path=/; domain=.google.com; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
请注意,返回了两个标头:
HTTP/1.1 301 Moved Permanently
HTTP/1.1 200 OK
这不仅对 Apache 服务器测试有用,而且对调试也很有用mod_rewrite
重写规则等等。
这种curl -I -L
方法比使用 Chrome 或 Firefox 等可视化浏览器更有用、更高效,因为这些程序旨在通过缓存内容来优化浏览速度。这意味着您可以在一秒钟内对 Apache 服务器进行调整,但可视化浏览器不一定会立即显示更改,除非您清除缓存或强制页面重新加载几次。它向curl -I -L
您展示了服务器当时响应您的请求所做的事情,这正是您在调试服务器配置时想要/需要的。
答案2
您想要的命令是curl
或wget
(取决于您的个人偏好)。这些命令向服务器发出 HTTP 请求。它们不适合模拟整个页面的加载(默认情况下,它们不会加载 HTML 页面引用的资产,并且它们根本无法执行 javascript 或与页面交互),但听起来您并不追求任何高级功能。因此, 或 几乎curl
肯定wget
会适合您。
答案3
@womble 是对的。但是,如果您没有curl
或wget
,则可以使用 telnet:
telnet x.x.x.x 80
GET /directory/index.php HTTP/1.1
Host: x.x.x.x
然后再按Enter一次(结束标头),您将获得原始 HTML。如果服务器使用 keepalive,您可能需要按Ctrl+ D(Unix)或Ctrl+ (Windows)退出。Z
答案4
您可以使用 OpenSSL 发出 GET 请求:
openssl s_client -quiet -connect cdn.sstatic.net:443 <<eof
GET /stackexchange/js/universal-login.js HTTP/1.1
Connection: close
Host: cdn.sstatic.net
eof
请注意,您也可以使用“HTTP/2”,但要小心,因为某些服务器(例如 github.com)不支持它。