Подтвердить что ты не робот

App Engine: 400 - ваш клиент выпустил неверный или незаконный запрос

Я сталкивался с этой ошибкой в ​​течение последних 3 или 4 недель, отправляя запросы на движок приложения. Некоторые запросы, особенно запросы HTTP DELETE, имеют эту ошибку, возвращенную с сервера google.

Другие сообщили о той же ошибке - с тремя результатами, которые я могу найти

Теперь я получаю такое поведение в каждом браузере. Я могу полностью очистить кеш/файлы cookie и т.д. В Chrome, Firefox, Safari, перезапустить браузер и по-прежнему надежно получить эту ошибку по тем же запросам, поэтому я не думаю, что связанный с ним файл cookie. В любом случае я могу выдавать запросы GET, POST и PUT без проблем с тем же файлом cookie.

Учитывая, что он надежно связан с конкретными запросами DELETE, неправильный URL-адрес представляется наиболее вероятным, однако мой URL-адрес действительно очень прост и отлично работает на dev-сервере

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, медленно ползающая по сети, что объясняет, почему она начиналась с перерывами, неуклонно возрастала и теперь происходит все время.

Кто-нибудь еще может отправлять HTTP-запросы DELETE в движок Google? Если да, укажите свой URL-адрес для ключей сущностей приложения. Вы видите что-нибудь хитрое с моим?

Любые другие указатели будут очень благодарны. Cheers,

Колин

Полный ответ с сервера google -

<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>
4b9b3361

Ответ 1

С помощью HTTP DELETE URI должен полностью идентифицировать ресурс, который нужно удалить. Отправка дополнительных данных в тело запроса неожиданна, и в App Engine, неподдерживаемый:

В самом деле, когда интерфейсы appspot видят запрос DELETE, который включает тела, например вашего приложения, они возвращают 501. Но если вы удалите тело, тогда оно будет служить 200.

Основываясь на следующем обсуждении, похоже, что они решили, что 400 был более уместным, чем 501. В любом случае, если вы опустите тело и переместите ключ сущности в URI, вы должны быть в порядке.

Ответ 2

Я видел, как это происходит, когда аутентификация сайта не позволяет правильно или адекватно разрешить пользователям нескольких браузеров. В ChromeOS исправление заключается в том, чтобы полностью выйти из системы и получить доступ к сайту, когда аутентифицировано только первичное удостоверение. Примеры: Gmail и Ingress.