12

アプリケーションでHEADリクエストを受け取っていますが、それらを処理するための最良の方法を考えています。オプションは次のとおりです。

  • それらをGETに変換し、通常どおりGETを処理してから、次のようにします。
    • 体を剥ぎ取ります(方法はわかりませんが-response.content = ''そうは思われません。
    • App Engineが本体を自動ストリップし、「HEADリクエストに応答して予期しない本体を削除しました」という警告を表示しているようです

これはクリーンで、デコレータやミドルウェアを使用してうまく記述できるようです。

  • 各HEADリクエストを特別に処理します。
    • これは、いくつかの(多くの?)ケースでデータストアへのアクセスを回避できることを意味します。
    • 明らかに、Content-lengthヘッダーを設定するミドルウェアがこのアプローチによってそうすることを妨げられるというリスクがあります。

他に何か?どちらをすればいいですか?ここでAppEngineを使用すると違いがありますか?微妙な詳細はありますか。もしそうなら、使用する適切なミドルウェアはありますか?GETに変換するには、 `request.method =" GET "で十分ですか(機能しているようです)?

4

1 に答える 1

14

アプリケーションがHEADリクエストを処理することを意図していましたか、それとも匿名のソースからのものですか?あなたは確かにHEADリクエストを尊重する義務はありません。ステータスコード405(メソッドは許可されていません)で戻り、AllowヘッダーにGETまたは処理しようとしているものを指定できます。

request.methodを手動でGETに設定しても意味がないと思います。おそらく、リクエスターが望んでいたものよりも大きい応答を返しているだけです。彼らはただ応答のヘッダーを見たかっただけです。HEADを処理したくない場合は、405およびAllowヘッダーアプローチを実行します。

一般に、クライアントは、必要がない場合に完全な応答を処理しないことを賢くしようとしているため、HEAD要求を送信します。彼らは、最後に応答を見たときからContent-Lengthが変更されているかどうか、またはLast-ModifiedまたはExpiresヘッダーを確認したいのかどうかを確認しています。

アプリケーションがHEAD要求を適切に処理することは確かに正常に動作しますが、そうする必要はありません。

于 2009-12-30T01:36:25.080 に答える