すべての記事

FourA Digest, 2026年6月12日〜6月19日

Singleで非UTF-8ページが文字化けせず読めるようになり、validateルールの成功判定が機能し、Wave 0のセキュリティ強化がリリースされました。

ハイライト

今週はリクエストのレスポンスに影響する変更が2つあります。非UTF-8サイトでのレスポンスボディが文字化けして届くことがなくなり、validateで許可された200以外のレスポンスがついに失敗ではなく成功としてカウントされるようになりました。また、カスタマーAPIのいくつかのセキュリティホールを塞ぎました。

新機能

Singleで非UTF-8ページが読めるように

ブルガリアのフォーラム、中国のEコマース、日本のニュース、あるいはwindows-1251、GBK、Big5、Shift_JISなどを送信するあらゆるサイトに対してSingleを呼び出すと、以前はレスポンスボディが壊れたバイトとして返されていました。基盤となるHTTPレイヤーがUTF-8デコーダをハードコードしていたため、キリル文字のページはпромоцииとして到着し、ユーザー側で元に戻す方法はありませんでした。

これはリクエストレイヤーで修正されました。Singleはソースの文字コードを検出し(まずContent-Typeヘッダ、次に<meta charset>、そして<meta http-equiv>)、ボディがJSONエンベロープに到達する前にUTF-8にトランスコードするようになりました。UTF-8やASCIIのページはそのまま通過します。画像やPDFのようなバイナリコンテンツがデコードされることはありません。生のバイトが必要な場合は、returnBuffer: trueが引き続き元のバッファを返します。

デフォルトで有効です。フラグの切り替えはありません。以前から機能していたページは引き続き機能し、ゴミを返していたページは読めるテキストを返すようになりました。Chromiumは文字コードをネイティブにデコードするため、ブラウザユーザーもこのことを気にする必要はありません。

validateルールが成功判定を制御するように

リクエストにvalidateを設定した場合(例えばvalidate.status.accept = [200, 403])、リクエストエンジンはすでにルールを尊重し、エラーなしでレスポンスを解決していました。しかし、アップストリームの結果分類器はルールを無視し、文字通り200でないものはすべてapplication_failとして分類していました。2つの結果がありました。許可された403はDashboardで失敗として表示され、成功したものだけが課金対象となるため、配信されたレスポンスも未請求でした。

分類器は、validateの宣言を尊重するようになりました。validateを含むリクエストは、ステータスに関係なく、エンジンがエラーなしで解決した場合は常に成功としてカウントされます。validateを含まないリクエストは以前と同じように動作する(200のみ成功)ため、レガシーパスに変更はありません。

前方のみの修正です。履歴の行は保存された結果を維持し、新しいリクエストは正しく分類されます。したがって、有効だとわかっていたレスポンスでApp Failが表示されていたのはこれが理由です。

カスタマーAPIのセキュリティ強化

カスタマーAPI全体のセキュリティレビューのWave 0をリリースしました。

  • CORShttps://foura.aiに制限されました。以前の設定は、クレデンシャルを送信する際にすべてのオリジンを反映しており、これは標準的なCSRF設定です。同一オリジンのブラウザ呼び出しやサーバー側のAPI呼び出しには影響しません。
  • Activityタイムラインの背後にあるメトリクスルートは、クエリに直接流れる自由形式のoutcomeフィルタを受け入れていました。現在は既知の結果値にホワイトリスト化されています。通常のアカウントからは悪用できませんが、塞ぐ価値はあります。

どちらもAPIコントラクトを変更するものではありません。通常の使用中に気付くことはないでしょう。しかし、問題を見つけ、誰かが気付く前にそれを塞ぐことは、やはり声を大にして言う価値があります。

ActivityのラベルがOverviewと一致するように

小さな変更です。DashboardのActivityテーブルは、Overviewのチップ、ドーナツ、タイムラインがわかりやすいラベル(App Fail)を表示し、各結果を色分けしている間、Application_failのような生の結果文字列をレンダリングしていました。同じデータで、2つのプレゼンテーションです。これらは同期され、両方とも同じラベルとカラーマップから読み取るようになったため、どこを確認しても行のステータスは同じに見えます。

数値

今週は新しいレイテンシや成功率の数値はありません。このほとんどは正確性とセキュリティの作業であり、正しい指標は「速くする」ことではなく「間違えなくなる」ことです。来週のダイジェストでは、進行中のいくつかの機能からのスループットデータを紹介する予定です。