2015-03-07 1 views
0

Мои запросы на отправку в мой адрес приложения Heroku теряют свои данные после 90% вызовов.Запросы Ajax POST к Heroku теряет данные сообщения

Я использовал GET и был изменен на POST по соображениям безопасности. Запросы GET работают в течение нескольких месяцев. Запросы POST работают как очарование локально в среде IDE и с помощью мастера. Но при перемещении его в приложение Heroku данные POST теряются в 90% вызовов.

Я уверен, что данные передаются правильно, как:

  1. Он работает при запуске моего приложения локально
  2. Использования Chrome Dev инструментов, которые я проверить, что данные являются частью вызова

Я отправляю подробные данные входящих запросов в журналы Papertrail. Здесь я вижу, что данные исчезли. Длина содержимого указывает, что данные запроса должны быть там, но они просто исчезли.

Ajax call я использую. Я попытался с запросом $ .post и не-jquery ajax. Я попытался с JSON.stringify по данным и множеству различных комбинаций заголовков запросов.

function doPostRequestWithDataV2(method, data) { 
    var methodName = "/call/echo"; 
    var jqxhr = $.ajax({ 
     type: "POST", 
     contentType: "application/json;charset=utf-8", 
     url: methodName, 
     data: {uuuuu: "ppppp"}, 
    }) 
      .done(function() { 
       var jsonString = jqxhr.responseText; 
       alert("All went well: " + jsonString); 
      }) 
      .error(function() { 
       alert("Problem: " + jqxhr.responseText); 
      }); 
} 

Полный выход успешного вызова. Важные отличия выделены жирным шрифтом.

 
Mar 07 07:29:18 my-fine-app app/web.1: FIRST TOUCH: Number of bytes 945 
Mar 07 07:29:18 my-fine-app app/web.1: FIRST TOUCH: ########## 
Mar 07 07:29:18 my-fine-app app/web.1: POST /call/echo HTTP/1.1 
Mar 07 07:29:18 my-fine-app app/web.1: Host: staging.kollektivafondval.se 
Mar 07 07:29:18 my-fine-app app/web.1: Connection: close 
Mar 07 07:29:18 my-fine-app app/web.1: User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0 
Mar 07 07:29:18 my-fine-app app/web.1: Accept: */* 
Mar 07 07:29:18 my-fine-app app/web.1: Accept-Language: en-US,en;q=0.5 
Mar 07 07:29:18 my-fine-app app/web.1: Accept-Encoding: gzip, deflate 
Mar 07 07:29:18 my-fine-app app/web.1: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Mar 07 07:29:18 my-fine-app app/web.1: X-Requested-With: XMLHttpRequest 
Mar 07 07:29:18 my-fine-app app/web.1: Referer: http://staging.kollektivafondval.se/debug/index.html 
Mar 07 07:29:18 my-fine-app app/web.1: Cookie: _ga=GA1.2.492366677.1421911589; __utma=33200548.492366677.1421911589.1425495130.1425495130.1; __utmc=33200548; __utmz=33200548.1425495130.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cp=0; undefined=0; ptl=0; _gat=1 
Mar 07 07:29:18 my-fine-app app/web.1: Pragma: no-cache 
Mar 07 07:29:18 my-fine-app app/web.1: Cache-Control: no-cache 
Mar 07 07:29:18 my-fine-app app/web.1: X-Request-Id: 17981145-acce-49bf-a5dd-e212a2a184ef 
Mar 07 07:29:18 my-fine-app app/web.1: X-Forwarded-For: 83.227.55.31 
Mar 07 07:29:18 my-fine-app app/web.1: X-Forwarded-Proto: http 
Mar 07 07:29:18 my-fine-app app/web.1: X-Forwarded-Port: 80 
Mar 07 07:29:18 my-fine-app app/web.1: Via: 1.1 vegur 
Mar 07 07:29:18 my-fine-app app/web.1: Connect-Time: 0 
Mar 07 07:29:18 my-fine-app app/web.1: X-Request-Start: 1425709758119 
Mar 07 07:29:18 my-fine-app app/web.1: Total-Route-Time: 0
Mar 07 07:29:18 my-fine-app app/web.1: Content-Length: 17 
Mar 07 07:29:18 my-fine-app app/web.1: String=any+string 
Mar 07 07:29:18 my-fine-app app/web.1: ########## 

Полная мощность при отсутствии данных. Важные отличия выделены жирным шрифтом.

 
Mar 07 07:29:15 my-fine-app app/web.1: ************************************************************ 
Mar 07 07:29:16 my-fine-app app/web.1: FIRST TOUCH: Number of bytes 928 
Mar 07 07:29:16 my-fine-app app/web.1: FIRST TOUCH: ########## 
Mar 07 07:29:16 my-fine-app app/web.1: POST /call/echo HTTP/1.1 
Mar 07 07:29:16 my-fine-app app/web.1: Host: staging.kollektivafondval.se 
Mar 07 07:29:16 my-fine-app app/web.1: Connection: close 
Mar 07 07:29:16 my-fine-app app/web.1: User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0 
Mar 07 07:29:16 my-fine-app app/web.1: Accept: */* 
Mar 07 07:29:16 my-fine-app app/web.1: Accept-Language: en-US,en;q=0.5 
Mar 07 07:29:16 my-fine-app app/web.1: Accept-Encoding: gzip, deflate 
Mar 07 07:29:16 my-fine-app app/web.1: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Mar 07 07:29:16 my-fine-app app/web.1: X-Requested-With: XMLHttpRequest 
Mar 07 07:29:16 my-fine-app app/web.1: Referer: http://staging.kollektivafondval.se/debug/index.html 
Mar 07 07:29:16 my-fine-app app/web.1: Cookie: _ga=GA1.2.492366677.1421911589; __utma=33200548.492366677.1421911589.1425495130.1425495130.1; __utmc=33200548; __utmz=33200548.1425495130.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cp=0; undefined=0; ptl=0; _gat=1 
Mar 07 07:29:16 my-fine-app app/web.1: Pragma: no-cache 
Mar 07 07:29:16 my-fine-app app/web.1: Cache-Control: no-cache 
Mar 07 07:29:16 my-fine-app app/web.1: X-Request-Id: 16caf2b0-88a6-455b-ac03-71581920e1e5 
Mar 07 07:29:16 my-fine-app app/web.1: X-Forwarded-For: 83.227.55.31 
Mar 07 07:29:16 my-fine-app app/web.1: X-Forwarded-Proto: http 
Mar 07 07:29:16 my-fine-app app/web.1: X-Forwarded-Port: 80 
Mar 07 07:29:16 my-fine-app app/web.1: Via: 1.1 vegur 
Mar 07 07:29:16 my-fine-app app/web.1: Connect-Time: 0 
Mar 07 07:29:16 my-fine-app app/web.1: X-Request-Start: 1425709756264 
Mar 07 07:29:16 my-fine-app app/web.1: Total-Route-Time: 0
Mar 07 07:29:16 my-fine-app app/web.1: Content-Length: 17 
Mar 07 07:29:16 my-fine-app app/web.1: ########## 
+0

какой стек вы используете? Возможно, если вы используете какую-либо инфраструктуру высокого уровня, защита csrf (https://en.wikipedia.org/wiki/Cross-site_request_forgery) может вызвать это, потому что она обычно применяется к запросам POST. – vodolaz095

+0

. Я использую собственный веб-сервер написанных на Java. Результат в журнале - результат чтения сокета без какой-либо обработки, сохраняя преобразование байтов в строку. Учитывая это, вы думаете, CSRF все еще может быть причиной? Я уверен, что браузер не ограничивает отправку на сервер. –

ответ

0

Ehh. Я нашел ответ на свой вопрос. Я выясню, что слой маршрутизации Heroku делает паузу после отправки заголовка. Таким образом, все, что мне нужно было сделать, - добавить 2-миллисекундный сон после того, как все байты были прочитаны, а затем сделать еще одно чтение из сокета. Теперь он работает отлично.

Смежные вопросы