App Engine:400 - 您的客户发出了格式错误或非法的请求

haw*_*ett 17 google-app-engine

在过去的3到4周内,我一直在遇到此错误,向app引擎发出请求.某些请求 - 特别是HTTP DELETE请求,从谷歌服务器返回此错误.

其他人报告了同样的错误 - 我可以找到3个结果

  1. 它是由过时的cookie引起的 - 清除你的cookie并运行良好的gmail帮助 -
  2. 它是由格式错误的网址引起的 - 只有我能找到的与urlfetch()相关的案例 - 网址中的空格 - App引擎组#1,App Engine组#2
  3. 没有决议 - 零星的behaiour,IE只.App Engine Group#3,App Engine Group#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
Run Code Online (Sandbox Code Playgroud)

响应标头显示请求从未进入应用引擎服务器(我的应用引擎日志承担了这一点) - 成功进入应用引擎服务器的请求看起来更像响应标头 -

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
Run Code Online (Sandbox Code Playgroud)

我正在使用jquery的$ .ajax()方法构造请求,并将类型设置为"DELETE".此外,这些问题最近一直在上周进行,尽管问题开始出现间歇性问题.现在,我所做的一切都没有任何效果.

目前我认为这是谷歌服务器上的某种配置错误/变化,慢慢地穿过他们的网络 - 这解释了为什么它开始间歇性地,稳定地增加,现在一直在发生.

是否有其他人能够向谷歌应用引擎发出HTTP DELETE请求?如果是的话,您的URL是否包含应用引擎实体密钥?你能看到我的狡猾吗?

任何其他指针将不胜感激.干杯,

科林

谷歌服务器的完整回复是 -

<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>
Run Code Online (Sandbox Code Playgroud)

Dre*_*ars 17

使用HTTP DELETE,URI应该完全标识要删除的资源.在请求正文中发送其他数据是意外的,并且在App Engine上不受支持:

实际上,当appspot前端看到包含正文的DELETE请求(例如您的应用程序)时,它们会返回501.但是,如果您删除正文,那么它将提供200.

根据随后的讨论,看起来他们认为400比501更合适.无论如何,如果省略正文并将实体密钥移动到URI中,那么你应该没问题.


ret*_*tr0 15

德鲁·西尔斯的回答是最有可能的问题。

\n

然而,在我们的例子中,有一个 GET 请求的请求正文为空{},导致400 - Bad Request错误并显示以下消息:

\n
\n

您的客户发出了格式错误或非法的请求。这\xe2\x80\x99就是我们所知道的。

\n
\n

GET 请求根本不应该有请求正文。

\n