POSTがGETに変わる理由

POSTが明示的に指定されているにもかかわらず、ボタンをクリックしたときに次のコードがGETメソッドによって要求を出す理由を理解しようと長い間試みました。



< html >

< head >

</ head >

< body >

< form method ="POST" action ="http://myhost/mydir" >

< input type ="submit" value ="→" />

</ form >

<? echo $_SERVER['REQUEST_METHOD'] ? >

</ body >

</ html >




* This source code was highlighted with Source Code Highlighter .








Apacheは、終了スラッシュなしのフォルダーのURLへのPOST要求で、スラッシュを含むURLにリダイレクトし、同時に要求がGETに変換されることがわかりました。 スラッシュを入れると、効果は消えます。



結論:アクションフォームでは、常にフォルダーのURLの最後にスラッシュを付けますが、ファイルのURLを使用します。



UPDNikitaが示唆しているように、この機能(最後にスラッシュを付けたURLにリダイレクト)は、apache 2.2のDirectorySlashディレクティブによって制御されます。デフォルトで有効になっており、無効にすることはお勧めしません。



UPD2 :そのようなスキームが判明

1. POSTをmysite / mydirに送信します

2.サーバーは、301からmysite / mydir /に応答します(これが正しい理由は、Apacheのドキュメントに記載されています

3.ブラウザーは、mysite / mydir /でパラメーターなしでGETを実行します(これがその方法です。RFC2616で説明されています)



その結果、パラメーター付きのPOSTの代わりに、パラメーターなしのGETを取得します。 すべては論理的ですが、やや予想外です。



All Articles