我在http://mlecturedownload.com/test-qt.php有一个测试页面设置,其中包含以下代码:
<?php
$foo = $_GET['foo'];
if ($foo == "0" || $foo == "1") {
echo $foo;
} else {
echo "Invalid foo";
}
在网络浏览器中访问此页面并修改 foo 的值可以正常工作,使用 curl 也可以正常工作。但是当我从 Qt 发送请求时,我得到一个 HTTP 406 错误代码,这意味着“不可接受”。这是我提出请求的方式:
void MainWindow::on_send_clicked()
{
QString url = "http://mlecturedownload.com/test-qt.php?foo=1";
QNetworkRequest request;
request.setUrl(QUrl(url));
nam->get(request); // nam is a QNetworkAccessManager
}
这是从 Wireshark 获得的整个 HTTP 请求和响应
GET /test-qt.php?foo=1 HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Accept-Language: en-CA,*
User-Agent: Mozilla/5.0
Host: mlecturedownload.com
HTTP/1.1 406 Not Acceptable
Date: Sat, 19 Jan 2013 17:14:37 GMT
Server: Apache
Content-Length: 275
Keep-Alive: timeout=5, max=75
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
<head><title>Not Acceptable!</title><script src='/google_analytics_auto.js'></script></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>
看起来服务器上名为 mod_security 的 Apache 模块导致了问题。有一些方法可以通过 .htaccess 禁用它,但没有一个对我有用。但我宁愿解决问题而不是禁用模块。有谁知道发生了什么?
编辑:我发布的网站链接托管在 HostGator 上。我在我的 EC2 服务器上创建了一个测试页面,它运行良好,可能是因为我没有启用该安全模块。我仍然需要让它在 HostGator 服务器上运行。