На моем https://disqussearch.com, развернутом как Jetty в Docker на AWS Elastic Beanstalk (дополнительные сведения о процессе см. В https://gmachine1729.com/2019/05/04/i-finally-used-docker-and-amazon-elastic-beanstalk/),, когда я запросил https://disqussearch.com/search?username=infoproc&query=feynman&comment_download_limit=1000&match_all_terms=false (это было сделано через Интернет).Пользовательский интерфейс, который выполнил запрос ajax), вместо потоковой передачи результатов 7 по одному асинхронно (ответ разбит на части) с
response.setHeader("Content-Type", "text/html")
response.setHeader("Transfer-Encoding", "chunked")
в моем коде.
Но на Heroku,с конечной точкой в https://pacific -waters-11622.herokuapp.com (и вы можете сделать там такой же запрос с помощью https://pacific -waters-11622.herokuapp.com / search? username = infoproc & query= feynman & comment_download_limit = 1000 & match_all_terms = false ) вы получите результаты, появляющиеся один за другим асинхронно вместо сообщения загрузки на некоторое время, а затем «Готово 7 результатов».
Я не настолько знаком сЗаголовок Transfer-Encoding, поэтому я сейчас не знаю, что может быть причиной этого.
Мой код веб-интерфейса приведен ниже. Я использую «onprogress» для обновления того, что отображается на странице, которое должно срабатывать приanotприходит ее чанк.
$('#search_submit').click(function(){
var username = $('input[name=username]').val();
var query = $('input[name=query]').val();
var comment_download_limit = $('input[name=comment_download_limit]').val();
var match_all_terms = $('input[name=match_all_terms]').is(':checked');
$.ajax({
xhr: function() {
var xhr = $.ajaxSettings.xhr();
xhr.onprogress = function(evt) {
$('#search_results').html(xhr.responseText);
$('#num_results').html(numResultsSoFar());
return false;
}
return xhr;
},
beforeSend: function(xhr) {
$.each(pendingXhr, function(i, xhr) {
xhr.abort();
});
pendingXhr.push(xhr);
$('#search_results').html('');
$('#progress_info').html("Loading results... (<span id='num_results'></span> results)");
$('#num_results').text(numResultsSoFar());
$('.loader').show();
$('#search_progress').show();
},
url: 'search',
type: 'GET',
data: { username: username, query: query, comment_download_limit: comment_download_limit, match_all_terms: match_all_terms },
success: function(result) {
$('#progress_info').html('Done! (' + numResultsSoFar() + ' results) ✔');
$('.loader').hide();
}
})
return false;
});
Что я могу изменить или настроить в своем коде или в AWS EB для решения этой проблемы?
У меня также есть /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy.conf
map $http_upgrade $connection_upgrade {
default "upgrade";
"" "";
}
server {
listen 80;
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
}
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log;
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://$host$1 redirect;
}
location / {
proxy_pass http://docker;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
}
}
Бьюсь об заклад, я мог бы решить эту проблему с соответствующим изменением в этом.
nginx version: nginx/1.14.1