web-dev-qa-db-ja.com

App Engine:400-クライアントが不正な形式または違法なリクエストを発行しました

過去3〜4週間、AppEngineにリクエストを送信してこのエラーが発生しました。特定のリクエスト(特にHTTP DELETEリクエスト)では、このエラーがGoogleサーバーから返されます。

他の人も同じエラーを報告しています-私が見つけることができる3つの結果

  1. 古いCookieが原因です-Cookieをクリアすると、正常に実行されます gmail help -
  2. これは、不正な形式のURLが原因です-urlfetch()に関連するケースのみ-URL内のスペース- App Engine Group#1App Engine Group#2
  3. 解決なし-散発的な動作、IEのみ。 App Engineグループ#App Engineグループ#4

私は今、すべてのブラウザでこの動作を常に受け​​ています。 Chrome、Firefox、Safariのキャッシュ/ Cookieなどを完全にクリアし、ブラウザを再起動しても、同じリクエストでこのエラーが確実に発生するため、Cookieに関連しているとは思いません。いずれにせよ、私はGETを発行できます、POST&PUTは同じCookieで問題ありません。

特定のDELETEリクエストで確実に発生することを考えると、不正な形式のURLが最も可能性が高いように思われますが、私のURLは非常に単純で、開発サーバーで正常に機能します。

Firebugは、リクエストヘッダーを次のように表示します(識別データが含まれているため、キーを変更しましたが、キーの中央から文字を削除しました。どちらの端も、先頭または末尾の空白を誤って削除していないことを保証するものではありません)

    Request URL:http://my-app.appspot.com/agprhcjgLEgVLbm93dCItX0RrbV9Ea25vd3RfbmV0X19wccxDA/Task.xml
    Request Method:DELETE
    Status Code:400 Bad Request

    Request Headers
    Accept:*/*
    Cache-Control:max-age=0
    Content-Type:application/x-www-form-urlencoded
    Origin:http://my-app.appspot.com
    Referer:http://my-app.appspot.com/
    User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4
    X-Requested-With:XMLHttpRequest

    Form Data
    entity_key:agprdC1hcjYLEgVLbm93dCIrX09Ea25vd3RfbmV0X19wMQw

    Response Headers
    Content-Length:1350
    Content-Type:text/html; charset=UTF-8
    Date:Fri, 30 Jul 2010 15:51:58 GMT
    Server:GFE/2.0

応答ヘッダーは、リクエストがアプリエンジンサーバーに到達しなかったことを示しています(そして私のアプリエンジンログはこれを裏付けています)-アプリエンジンサーバーに正常に到達したリクエストは、応答ヘッダーでは次のようになります-

Cache-Control:no-cache
Content-Length:4332
Content-Type:application/xml
Date:Fri, 30 Jul 2010 11:08:21 GMT
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Server:Google Frontend
X-AppEngine-Estimated-CPM-US-Dollars:$0.004033
X-AppEngine-Resource-Usage:ms=573 cpu_ms=146 api_cpu_ms=30

Jqueryの$ .ajax()メソッドを使用してリクエストを作成し、タイプを「DELETE」に設定しています。また、問題が断続的に発生し始めていましたが、これらは先週と同じくらい最近機能しました。今のところ、私がすることは何の効果もありません。

現時点では、これはGoogleサーバーでのある種の構成エラー/変更であり、ネットワーク全体でゆっくりと忍び寄っていると思います。これが、断続的に始まり、着実に増加し、現在は常に発生している理由を説明しています。

他の誰かがGoogleApp EngineにHTTPDELETEリクエストを発行できますか?もしそうなら、あなたのURLにはApp Engineエンティティキーが含まれていますか?あなたは私のもので何か危険なものを見ることができますか?

他のポインタは大歓迎です。乾杯、

コリン

グーグルサーバーからの完全な応答は-

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
<style><!--
body {font-family: arial,sans-serif}
div.nav {margin-top: 1ex}
div.nav A {font-size: 10pt; font-family: arial,sans-serif}
span.nav {font-size: 10pt; font-family: arial,sans-serif; font-weight: bold}
div.nav A,span.big {font-size: 12pt; color: #0000cc}
div.nav A {font-size: 10pt; color: black}
A.l:link {color: #6f6f6f}
A.u:link {color: green}
//--></style>
<script><!--
var rc=400;
//-->
</script>
</head>
<body text=#000000 bgcolor=#ffffff>
<table border=0 cellpadding=2 cellspacing=0 width=100%><tr><td rowspan=3 width=1% nowrap>
<b><font face=times color=#0039b6 size=10>G</font><font face=times color=#c41200 size=10>o</font><font face=times color=#f3c518 size=10>o</font><font face=times color=#0039b6 size=10>g</font><font face=times color=#30a72f size=10>l</font><font face=times color=#c41200 size=10>e</font>&nbsp;&nbsp;</b>
<td>&nbsp;</td></tr>
<tr><td bgcolor="#3366cc"><font face=arial,sans-serif color="#ffffff"><b>Error</b></td></tr>
<tr><td>&nbsp;</td></tr></table>
<blockquote>
<H1>Bad Request</H1>
Your client has issued a malformed or illegal request.

<p>
</blockquote>
<table width=100% cellpadding=0 cellspacing=0><tr><td bgcolor="#3366cc"><img alt="" width=1 height=4></td></tr></table>
</body></html>
17
hawkett

HTTP DELETEを使用すると、URIは削除するリソースを完全に識別する必要があります。リクエスト本文で追加のデータを送信することは予期しないことです およびApp Engineではサポートされていません

実際、appspotフロントエンドがアプリなどの本文を含むDELETEリクエストを確認すると、501が返されます。ただし、本文を削除すると、200が提供されます。

その後の議論に基づいて、彼らは501よりも400の方が適切であると判断したようです。いずれにしても、本文を省略してエンティティキーをURIに移動すれば、問題はないはずです。

18
Drew Sears

これは、サイトの認証で複数のブラウザユーザーが適切または適切に解決されない場合に発生することがわかりました。 ChromeOSでの修正は、完全にサインアウトし、プライマリIDのみが認証されたときにサイトにアクセスすることです。例:Gmail、Ingress。

2
Just Visiting