12

何らかの理由で、これは機能しません:

$.ajax({
    url: "News.html",
    cache: false,
}).done(function(data) {
    $("#content").load(data);
});

それは私に与えます:

GET http://127.0.0.1/News.html 404 (Not Found)

しかし、何らかの理由で、その URL を手動で開く(URL をコピーして貼り付ける) と問題なく動作します。そして、最初はブラウザのキャッシュと関係があると思ったのでcache: false、ajax関数にオプションを追加しましたが、それでも.. argh ..

また、ファイルに要求された URL として表示されませaccess.log

私が推測する情報については、私は実行しています:

  • lighttpd
  • localhost:port 経由の fast-cgi としての php
  • マップされた .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

チェックポイント

これまでのコメントからの結論は、これは jQuery の問題ではない可能性があるということです。サーバーがすべてのデータで応答し(送信された生データを確認しました)、すべてが含まれていることを考慮すると、応答ヘッダーには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 :)

ゼルクムス試験

# echo "wham bam" > zerkms_doesnt_believe.html
# 

ここに画像の説明を入力

設定ファイル

エラーログとそうでないもの

cURL テスト

cURL コピー ペースト テスト

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の問題であるという結論を私に与えます(phpが応答する必要がある200コードを尊重しないことでlighttpdが嫌いだったとしても..そしてそれについては申し訳ありません.PHPで少しbashして見てくださいそれが私が結論を出すのに役立つなら)

一時的な解決策

.php ページの上部に以下を配置すると、この問題を回避できます。これはクリーンな回避策であり、機能しますが、長期的な修正ではないことに注意してください。

<?php
    header("HTTP/1.0 200 Found");
?>
4

4 に答える 4

1

新しい OpenBSD 5.3 サーバーをセットアップし、構成ファイルを使用してインストールした後、根本原因を絞り込むことができました。

lighttpd.conf にはserver.chroot = "/var/www/"、そのすべてのパス名で先頭から /var/www が除外されているためです。php-fastcgi プロセスは chroot されていないため、ファイル システムの見方が少し異なります。

解決策 #1: lighttpd を chroot せず、、、およびを絶対パスに変更server.document-rootaccesslog.filenameますserver.errorlog

解決策 #2: php-fpm などを使用して、PHP chroot を認識/可能にする

于 2013-07-18T22:11:56.170 に答える
-2

シンプルなjQuery .load()メソッドを使用します。

$(document).ready(function () {
    $("#content").load('News.html');
});
于 2013-07-17T13:04:59.330 に答える