「451エラー」もあるらしい。

私のサイトではないが、 のサイトで、ブーストやリプライが届かず、他のサーバーをフォローすることもできない状態になったらしい。

✦ちゃこる


iceshrimpの個人サーバーを運用しています。

BT通知が全く来てないことに気が付き、そのほかにもリプライ通知が受け取れていなかったことがわかりました。試したのはmisskey.io、fedibird、pawooからです。

サーバーのログを見ると「StatusError: host blocked(status:451)」と出ていました。
このエラーは法的な理由によりアクセスがブロックされているとのことですが、投稿やリアクションなどは送受信できている状態で、なぜ一部アクティビティだけブロックされてしまっているのかわからず困っています。

firefishを運用していた期間を含めて2年ほど運用をしていますがこのようなことが初めてで法的問題がなんなのかもわからず困っております。
この現象を解消するのに何をしたらよいのか、ご教示いただけますと幸いです。

使っているサービス
・Squarespace
・cloudflare
・cloudflare R2
・WebArena Indigo

 「451エラー」が原因らしい。何それ?と検索してみた。

"ウェブページを見ているときに「404エラー」のようなHTTPエラーコードが表示された経験は、インターネットユーザーなら誰にでもあるはず。「404」は該当ページが削除されていたり、サーバーが落ちていることを表すエラーコードなのですが、新たなエラーコードとして、「政府による検閲で消去されたページ」に対して表示される「451エラー」が承認されました。
"
政府の検閲で消されたページを示す「451エラー」がスタート - GIGAZINE
https://gigazine.net/news/20151222-http-status-code-451/

 2015年12月22日の記事なんだけど、「政府による検閲で消去されたページ」とのこと。

 問題が生じているインスタンスと思われるものを検索して見つけて、表示してみたが見える。mastodon-japan.netでも、mastodon.socialでも、 #fedibird でも見られる(アクセスできる)状態。問題が生じたことを知らせる投稿も見られて、ブーストもできた。ただ、mastodon-japan.netでも、mastodon.socialでも、 #fedibird では私がブーストしたことが分かる状態だが、問題が生じているインスタンスで見ると、私にブーストされてないことになっている。「通知が受け取れていなかった」とのことなので、ブロックされているのは、こちら側からの通信? こちらには法的な問題がないはずなので、独裁国家が外国からの情報を遮断しているような、そんなイメージ。それは譬えだけど、そんな感じならば、こちらの投稿も見られないはずだけど、見られているのなら、単なる #バグ だろうな。突然起こったとのことなので、サーバーの仕様変更で生じたのか?

未分類
管理人のマストドンアカウントへのリンクなど

コメント

  1. ishii ishii より:

    私がブーストしたのにブーストされてないことになっているのは、私のアカウントがあちらのインスタンスに承認されてないからで、当たり前にあることだな。
    分散型だから、見るインスタンスによってフォロー数やフォロワー数や投稿数が異なっているのも、そのインスタンスで認識されている投稿やアカウントだけが表示されたりカウントされたりしているからで、451エラーの問題とは関係ない。

  2. ishii ishii より:

    「451エラー」が返ってきた場合、必ずしも「政府による検閲で消去されたページ」ではないらしい。「法的な理由によりアクセスがブロック」の方は微妙な表現で、「法的な理由」がサーバー管理者の解釈(ブロックの口実、理由)の場合もありそう。 #Gemini に尋ねた。
    例えば、次のようなコード。

    const instance = await Instance.findOne({ host: extractDbHost(uri) });
    if (instance && instance.isBlocked) throw { statusCode: 451 }; 

    これはインスタンスが存在し、かつブロックしている場合にステータスコードが 451 のオブジェクトを含むエラーをスローしているだけらしい。次のコードも同様。

    app.get('/some-resource', async (req, res) => {
      try {
      const instance = await Instance.findOne({ host: extractDbHost(req.hostname) });
      if (instance && instance.isBlocked) {
        return res.status(451).send('このリソースは法的理由により利用できません。');
      }
      // 通常の処理
      res.send('リソースの内容');
      } catch (error) {
      console.error(error);
      res.status(500).send('サーバーエラー');
      }
    });

    もっともらしいコードではあるが、451にしているのはブロックしているサーバーであって、ブロックしている理由については「このリソースは法的理由により利用できません。」と説明を返しているが、それが本当に法的な理由かどうかは分からない。

タイトルとURLをコピーしました