プロジェクト

全般

プロフィール

Bug(バグ) #4207

完了

「いいね」の状態を一度に取得する対象が多すぎる場合に「データ取得に失敗しました」というアラートが表示される

kaoru n さんが7年以上前に追加. 7年以上前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2017-06-09
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

クライアントからの HTTP リクエストのヘッダの サイズが 8190 bytes を超える場合に「データ取得に失敗しました」というアラートが表示される

Causes (原因)

リクエストの先頭行が 8,192 バイトを越える場合について試算:

  • "GET /api.php/like/packet_search.json?apiKey=" → 44文字
  • APIキー → 64文字
  • "&data%5B0%5D%5BlikeId%5D=1111&data%5B0%5D%5Btarget%5D=A" → 55文字 * 147件 = 8,085文字
  • " HTTP/1.0" → 9文字

→ 合計: 8,202文字

アクティビティ 147 件のいいね状態を取得すると 8,192 バイトを超過する(件数は表示するタイムラインの投稿数とコメント数の合計)

ホーム画面のタイムラインに表示される投稿 20 件に平均 7 コメントが付くと 8,192 バイトを超過する計算になる。
あるいは、20 件の投稿のうち 13 件にコメントが上限の 10 件まで付いていても同様に超過する。

apache2.2のデフォルトは 8190 bytes
https://httpd.apache.org/docs/2.0/ja/mod/core.html#limitrequestfieldsize

Way to fix (修正内容)

opLikePlugin に以下の修正を加えることで packet_search.json が POST メソッドでリクエストされることを確認しました
(API 側は修正不要です)

--- a/web/js/like-smartphone.js
+++ b/web/js/like-smartphone.js
@@ -178,7 +178,7 @@ function packetLoad(dataList)
   $.ajax(
   {
     url: openpne.apiBase + 'like/packet_search.json?apiKey=' + openpne.apiKey,
-    type: 'GET',
+    type: 'POST',
     data:
     {
       'data': dataList,
--- a/web/js/like.js
+++ b/web/js/like.js
@@ -310,7 +310,7 @@ function packetLoad(dataList)
   $.ajax(
   {
     url: openpne.apiBase + 'like/packet_search.json?apiKey=' + openpne.apiKey,
-    type: 'GET',
+    type: 'POST',
     data:
     {
       'data': dataList,

他の形式にエクスポート: Atom PDF