【发布时间】:2013-07-15 06:58:50
【问题描述】:
由于某种原因,这不起作用:
$.ajax({
url: "News.html",
cache: false,
}).done(function(data) {
$("#content").load(data);
});
它给了我:
GET http://127.0.0.1/News.html 404 (Not Found)
但无论出于何种原因,手动打开该网址(复制粘贴网址)工作就可以了。
起初我认为它与浏览器缓存有关,所以我在 ajax 函数中添加了cache: false 选项,但即便如此.. 啊..
它不在我的access.log 文件中显示为请求的 URL..
关于我猜的信息,我正在跑步:
- 轻量级
- php 通过 localhost:port 作为 fast-cgi
- 映射的 .html => .php
- 运行 OpenBSD 5.3
未注释(/etc/php.ini):
- cgi.fix_pathinfo=1
还有:
# ls *.html
News.html index.html
这是News.html 的请求标头:
Request URL:http://127.0.0.1/News.html
Request Method:GET
Status Code:404 Not Found
请求标头
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:127.0.0.1
Referer:http://127.0.0.1/index.php
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
X-Requested-With:XMLHttpRequest
响应标头
Content-type:text/html
Date:Tue, 16 Jul 2013 21:55:05 GMT
Server:lighttpd/1.4.32
Transfer-Encoding:chunked
X-Powered-By:PHP/5.3.21
检查点
到目前为止,来自 cmets 的结论是,这可能根本不是 jQuery 问题。
考虑到服务器响应所有数据(我检查了发送的原始数据)并且它包含所有内容,但响应 header 显示404。
意思是,数据找到了,但标题说 404... 至少可以说很奇怪..
卷曲测试
curl 'http://127.0.0.1/News.html' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Host: 127.0.0.1' -H 'Accept-Language: en-US,en;q=0.8' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36' -H 'Accept: */*' -H 'Referer: http://127.0.0.1/' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' --compressed
Here you'll soon find a facebook feed, among other things :)
Zerkms 测试
# echo "wham bam" > zerkms_doesnt_believe.html
#
配置文件
错误日志和什么
卷曲测试
通过 Python 客户端手动进行 FastCGI 测试:
# python fcgi_app.py
{'FCGI_MAX_CONNS': '1', 'FCGI_MPXS_CONNS': '0', 'FCGI_MAX_REQS': '1'}
经过一番修改,我弄清楚了 FastCGI 协议是如何工作的,并且我找到了一个符合我需求的客户端,有趣的是它与我的脚本名称相匹配,所以这是输出:
# python fcgi_app.py
('404 Not Found', [('x-powered-by', 'PHP/5.3.21'), ('content-type', 'text/html')], '<html>\n\t<head>\n\t\t<title>test php</title>\n\t</head>\n<body>\nChecking</body>\n</html>', '')
给我的结论是这实际上是一个 PHP 问题(即使我讨厌 lighttpd 不尊重 php 应该响应的 200 个代码)。对此我很抱歉。应该继续 bash PHP,看看这是否有助于我得出结论)
临时解决方案
将以下内容放在 .php 页面的顶部将解决此问题。 请注意,这是一个干净的解决方法,它会起作用,但肯定不是长期修复。
<?php
header("HTTP/1.0 200 Found");
?>
【问题讨论】:
-
你确定 News.html 是用大写的 N 写的吗?
-
@Jorge 没有帮助,首先.. 运行
lighttpd,其次.. 这不是 Windows。重启并不能解决当前的问题。 -
@Torxed:创建带有一些内容的
zerkms_doesnt_believe.html文件并请求它而不是News.html -
好吧,我没主意了 :-S 祝你好运(几天后再读)
-
您在消除作为原因的请求、代理和传输方面做得很好。在服务器端,lighttpd 和 php 都可以将 headers 添加到将覆盖默认 headers 的响应中。你能附上你的 lighttpd 配置吗?