操作
Bug(バグ) #4207
完了「いいね」の状態を一度に取得する対象が多すぎる場合に「データ取得に失敗しました」というアラートが表示される
開始日:
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,
操作