2011-12-28 4 views
3

簡単に言えば、私はユーザとしてサインアップしてデータを追加できるウェブサイトを持っています。現時点では、特定のデータを一度追加するだけですので、加算は冪等でなければなりませんが、理論的には同じデータを複数回追加できます。私はここには入りません。非冪等のリクエストにGETを使用する

RFC 2616によると、GET要求は冪等でなければなりません(本当に無能)。私は、ユーザーが訪問

http://example.com/<username>/add/?data=1 

ような何かをできるようにしたいそして、これは、そのデータを追加します。 PUTリクエストにはRESTでこれを行うことは意味がありますが、ブラウザでPUTリクエストを行う方法はわかりませんし、ほとんどの人がやりたいと思っていることは疑いの余地はありません。 POSTを使用しても適切ですが、これにも同様の問題があります。

ユーザーがGETのみを使用してデータを追加できるようにする技術的に正しい方法がいくつかあります(手動でリンクにアクセスしたり、外部のウェブサイトにリンクを使用させるなど)。彼らがこのページにアクセスしたとき、私は自分のPOST/PUT要求をjavascriptまたはcURLで作ることができましたが、これは依然として冪等のGETリクエストの精神に違反しているようです。

答えて

4

を使用してユーザーがデータを追加できるようにする技術的に正しい方法はありますか。

クライアントからのアクセスをどのようにしても、RFC2616に違反することになります。最終的には、どのようにリクエストを処理するかは決まりますが、HTTP仕様に反すると、クライアントやプロキシに予期せぬ副作用が発生する可能性があります。doそれ。

も参照してください:Why shouldn't data be modified on an HTTP GET request?


は限りブラウザからPUTすることができないとして、POSTを使用するだけでなく、_methodのいくつかの並べ替えを渡すほとんどがその[1][2]ための回避策は、ありますサーバーによって傍受され、適切なサーバー側のアクションにルーティングされます。

+0

つまり、私は単にこれを行うべきではありませんか? –

+3

@ tandu - 仕様(と私)はどちらもあなたがしてはならないと言っています。しかし、あなたが仕様に反するとHTTP警察はあなたのドアをノックすることはありません(私は彼らがとにかくそう思わない)。それを行うことの潜在的な結果に気をつけてください。 –

関連する問題