操作
Bug(バグ) #1977
完了Web API の認証エラー時のHTTPレスポンスヘッダーが200となっている
開始日:
2011-03-26
期日:
進捗率:
100%
予定工数:
3.6 で発生するか:
Yes (はい)
3.8 で発生するか:
Unknown (未調査)
説明
現象¶
認証が通っていない環境から以下のようなコマンドを叩くと
本来はレスポンスで 401 もしくは 403 のHTTPヘッダが一行目に返ってくるはずが
200 のレスポンスが返ってきている
$ curl -I http://sns.example.com/api.php/feeds/member/1 HTTP/1.1 200 OK Date: Fri, 25 Mar 2011 19:53:38 GMT
原因¶
認証失敗時のHTTPヘッダの一行目の記述がない
修正内容¶
lib/filter/opAPISecurityFilter.class.php の 51行目にてステータスコード等を出力しているが
ヘッダー出力ではないため、上記の記述を他のヘッダー出力の前に「ヘッダー」出力する
Maki Takahashi さんがほぼ13年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 c50557e901d77633db2b1812b2c7041a3ca045c5 で適用されました。
Maki Takahashi さんがほぼ13年前に更新
- 担当者 を Shingo Yamada から Maki Takahashi に変更
- 3.6 で発生するか を Unknown (未調査) にセット
- 3.4 で発生するか を Unknown (未調査) にセット
Maki Takahashi さんがほぼ13年前に更新
- 3.6 で発生するか を Unknown (未調査) から Yes (はい) に変更
- 3.4 で発生するか を Unknown (未調査) から Yes (はい) に変更
curlコマンドではなぜか404エラーとなってしまうため、telnetにて確認しました。
telnet sns.example.com 80 GET /api.php/feeds/member/1 HTTP/1.1 Host: sns.example.com
HTTP/1.1 200 OK === (省略) === 401 Unauthorized
Kousuke Ebihara さんがほぼ13年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
- 修正前のコードにも言えることですが、自前で
header()
関数をコールするよりもsfWebResponse::sendHttpHeaders()
をコールする形にするのが望ましいです。- その場合、
Content-Type
ヘッダが新たに出力されるようになると思われます。この値はtext/html
がデフォルトです。 OpenPNE Web API、 Google Data API、 Atom Publishing Protocol (RFC 5023) の仕様書のいずれにもエラー時のレスポンスの Content-Type についての記述がありません。text/plain
を採用するのが妥当かもしれませんね。
- その場合、
- レスポンスボディへのステータスコードの出力が削除されていますが、これはなぜでしょうか。 RFC 5023 の "5.5. Use of HTTP Response Codes" http://tools.ietf.org/html/rfc5023#section-5.5 には、以下のような記述があります。
Implementers are asked to note that according to the HTTP specification, HTTP 4xx and 5xx response entities SHOULD include a human-readable explanation of the error. (拙訳)HTTP 仕様に基づき、 HTTP 4xx と 5xx のレスポンスエンティティは human-readable なエラーの説明を含むべき (SHOULD) であることに注意することが実装者に求められている。
要求レベルが RFC 2119 で定められた SHOULD であるので、この仕様に反した実装をするからには、仕様を退けるべき妥当な理由が必要だと考えます。- また、この変更は、仕様に反しているだけでなく、互換性の観点からも問題があると考えています。この修正以前はステータスコードからエラーであるかどうかの判断がおこなえなかったわけですから、レスポンスボディからステータスコードを得て、エラーについての判別をおこなっていた可能性が充分に考えられます。これのレスポンスボディは利便のための配慮で、 RFC 5023 においてさえも明示された仕様ではないため、この変更をおこなうことにより意図した挙動をおこなわなくなるようなアプリケーションは、そのアプリケーション側で修正をおこなうべきと言えるとは思います。とはいえ、特段理由がないのならば後方互換性を保つような実装を維持するのが妥当だと考えます
Maki Takahashi さんがほぼ13年前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 6a717dbea7857a13095033077f68f6416d180ec3 で適用されました。
Kousuke Ebihara さんがほぼ13年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Yuma Sakata さんがほぼ13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。
操作