For a long time I tried to understand why the following code, when a button is pressed, gives a request using the GET method, although POST is clearly indicated.
< 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 .
It turns out that Apache, with a POST request to the URL of the folder without a final slash, redirects to the URL with a slash and at the same time the request is transformed into GET. If you put a slash, the effect disappears.
')
Conclusion: In the action form, always put a slash at the end of the folder URL, and better use the file URL.
UPD : As
Nikita suggests, this feature (redirection to the URL with a slash at the end) is controlled in apache 2.2 by the DirectorySlash directive, it is turned on by default and is not recommended to be disabled.
UPD2 : It turns out this scheme
1. We send POST to mysite / mydir
2. The server answers us 301 to mysite / mydir / (why this is correct, described in
the Apache documentation )
3. The browser makes GET without parameters on mysite / mydir / (this is how it should be done, it is described in RFC 2616)
As a result, instead of our POST with parameters, we get GET without parameters. Everything is logical, but somewhat unexpected.