2017-01-04 5 views
3

X-SendFileを使用してユーザーに配信されるより大きなビデオファイルで奇妙な動作が発生しました。サーバーは412 - Precondition Failedで応答します。412 - X-SendFileで配信されたファイルで前提条件が失敗しました

私はX-SendFileを無効にするとすべてが問題ないので、それに関連している必要があります。

いくつかのコード:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mime = finfo_file($finfo, $file_path); 

header("Content-type: ". $mime); 
finfo_close($finfo); 
header('Content-length: '.filesize($file_path)); 
header('Content-Disposition: inline; filename="'.basename($file_path).'"'); 
header('X-Sendfile: ' . $file_path); 

ヘッダ:

Request URL:[redacted]/8c1ab69235fef2009731481d728a3c37.mp4 
Request Method:GET 
Status Code:412 Precondition Failed 
Remote Address:192.168.100.100:80 

要求:

Accept:*/* 
Accept-Encoding:identity;q=1, *;q=0 
Accept-Language:en-US,en;q=0.8,ro;q=0.6,de;q=0.4 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:PHPSESSID=rlva81b8gl98flv3r37dd0jtu4 
Host:datasolutions.eleap.loc 
If-Match:"57e7e64-545404121a47c" 
Range:bytes=92078080- 
Referer:[redacted]/8c1ab69235fef2009731481d728a3c37.mp4 
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 

応答:

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Connection:close 
Content-Disposition:inline; filename="8c1ab69235fef2009731481d728a3c37.mp4" 
Content-length:0 
Content-Type:video/mp4 
Date:Wed, 04 Jan 2017 11:08:23 GMT 
Expires:Thu, 19 Nov 1981 08:52:00 GMT 
Pragma:no-cache 
Server:Apache/2.4.20 (Ubuntu) 
X-Sendfile:[redacted]/8c1ab69235fef2009731481d728a3c37.mp4 

私はこれの原因が何であるかについて何のヒントも見つけられませんでした。多分あなたの人の一人が手がかりを持っています。ありがとうございました。

更新:これはChromeでのみ発生します。

答えて

4

mp4を読み込むときに同様の問題が発生しています(X-Sendを使用していません)。 Chromeを以前のバージョンにダウングレードすると(54)、問題は解決されます。数週間前に出てきた新しいバージョン55は、この問題を導入したようです。

+0

面白いです、ありがとうございました。 –

0

mod_xsendfile 0.12 &を使用しているWebサーバーのグループで、 "412 Precondition Failed"を解決しました。Apache/mod_perlセットアップでmp3オーディオファイルを配信しました。

Apacheはアウトバウンドヘッダーに弱いETagを設定していました。 Chrome版> = 55はETagを使用してHTTP_IF_MATCHヘッダーでファイルの新鮮度をチェックしていましたが、xsendfileは412で応答していました。

特定のディレクトリのETagsを無効にしました。

<Directory /> 
    Header unset Etag 
    FileETag none 
</Directory> 

また、あなたは(例:サーバのクラスタ間で動作するiノードのパラメータを削除)のETagを計算するために使用されるパラメータを編集することができます。詳細の

短い説明はここで見つけることができます: http://joshua.schachter.org/2006/11/apache-etags

Apacheのドキュメント:http://httpd.apache.org/docs/2.2/mod/core.html#fileetag

エンティティタグ:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag