2

簡単なアクションを実行しようとしています:

  1. URL への投稿
  2. HTTP 303 を返す (SeeOther)
  3. 新しい URL から取得する

私が知る限り、これはかなり標準的な方法です: http://en.wikipedia.org/wiki/Post/Redirect/Get

また、SeeOther は次のように動作するように設計されているようです: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4

サーバー側のコントローラーとして web.py を使用していますが、それが問題ではないと思われます。GET すると、SeeOther は期待どおりに問題なく動作します。同じ URL に POST すると、ブラウザは何もリダイレクトまたはロードできません。

ブラウザの問題かと思い、IE9とGoogle Chrome(v23っぽい)両方試してみました。どちらも同じ問題を抱えています。

web.py がページを正しく提供していないか、不適切な URL を生成している可能性があると考えて、telnet を使用してヘッダーを調べました。私はこれを見つけました:

HTTP GET (これはブラウザーで機能します):

GET /Users/1 HTTP/1.1
HOST: domain.com

HTTP/1.1 303 See Other
Date: Mon, 24 Dec 2012 18:07:55 GMT
Server: Apache/2
Cache-control: no-cache
Location: http://domain.com/Users
Content-Length: 0
Content-Type: text/html

HTTP POST (これはブラウザーでは機能しません):

POST /Users/1 HTTP/1.1
HOST: domain.com

HTTP/1.1 303 See Other
Date: Mon, 24 Dec 2012 18:12:35 GMT
Server: Apache/2
Cache-control: no-cache
Location: http://domain.com/Users
Content-Length: 0
Content-Type: text/html

作業に支障をきたす可能性のあるもう 1 つのこと: ユーザーに表示される domain.com/Users/1 が実際には domain.com/control.py/Users/1 になるように mod-rewrite を使用しています。

私が持っている情報/トラブルシューティングは他にもあるかもしれませんが、私は今空白を描いています.

質問:

これが GET リクエストでは機能するのに、POST リクエストでは機能しないのはなぜですか? どこかに応答ヘッダーがありませんか?

編集:

IE9 開発者ツールと Chrome のインスペクターを使用すると、POST 後に 303 がブラウザーに戻ってこないようです。ただし、GET 要求を実行すると、303 が入ってくることがわかります。

ただし、Chrome のインスペクターを詳しく調べたところ、すべてのリクエストをログに記録できることがわかりました (ページ呼び出しごとにクリアしないでください)。これにより、何らかの理由で POST リクエストが失敗しているように見えることがわかりました。繰り返しますが、GET は正常に機能します。

4

1 に答える 1

1

これがあなたの問題ではない可能性は十分にありますが、あなたのコードが投稿されていないので、(念のため)試してみます。

web.py を使用しているため、オブジェクトに POST メソッドが定義されていますか?

すなわち

urls = (
    '/page', 'page'
)

class page:

    def POST(self):
        # Do something

    def GET(self):
        # Do something else
于 2013-01-12T06:52:52.917 に答える