私が実行しているサーバーにデータを投稿する SublimeText 2 プラグインを作成しています。電車の中で携帯電話をWiFiホットスポットとして使って基本を書きましたが、すべてうまくいきました. その後、家に帰ると、何を投稿しようとしても、サーバーから 400 Bad Request 応答が返されました。ラップトップを個人用ホット スポットに戻すと、エラーは解消されました。詳細は次のとおりです。
この場合の「クライアント」は Sublime Text 2 です。ご存知ない場合は、それらのプラグインは Python で記述されており、urllib、urllib2、および httplib を使用してリクエストを処理しています。リクエストを行う関連する Python は次のとおりです。
params = urllib.urlencode({'title': 'ST2 Note', 'content': data, 'user': user, 'pass': pswd})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("staging.myserver.me:80")
conn.request("POST", "staging.myserver.me/st2", params, headers)
response = conn.getresponse()
data2 = response.read()
print data2
conn.close()
上記のコードは POST リクエストを問題なく送信します。特定の接続を使用している場合、サーバーはそれを確実に理解します。これは、POST データで送信したものをエコーバックするように設定しているためです。要求は PHP (Codeigniter) アプリケーションの一部に対して行われています。はい、この特定の URL に対して CSRF 保護がオフになるように特別に設定したので、それが問題ではないことがわかります。PHPコード自体はあまり面白くありませんが、サーバーヘッダーをエコーバックするように設定しました.これは、動作する接続からリクエストを行ったときに送信されたものです:
Host: staging.myserver.me
Accept-Encoding: identity
Content-Length: 56
Content-type: application/x-www-form-urlencoded
Accept: text/plain
Via: HTTP/1.1 akrmspsrvz9ts212.wnsnet.attws.com
サーバーが一部の接続からのリクエストを理解するが他の接続からのリクエストを理解しない理由はありますか?