Потоковый HTTP-ответ не показывает полное содержимое - PullRequest
0 голосов
/ 26 февраля 2020

Я создаю сайт, используя django. Я загружаю веб-страницы, используя StreamingHttpResponse, дополнительная информация здесь .

Мой views код:

from django.http.response import StreamingHttpResponse    

class SearchNews:
    def get(self, request):
        response = StreamingHttpResponse(self._load_stream(request))
        return response

    def _load_stream(self, request):
        query = request.GET.get('query', '')
        yield loader.get_template('news_results_part1.html').render({
            'request': request,
            'query': query,
        })
        api = SearchNews()
        results = api.search(query)
        yield loader.get_template('news_results_part2.html').render({
            'request': request,
            'query': query,
            'results': results,
        })

У меня две html части, первая часть включает только заголовок, а вторая часть содержит результаты поиска.

Первый html код детали:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <title>
        {{ query }}
    </title>

    <style>
        {% include 'internal_static/css/search_results.css' %}
    </style>

</head>
<body>
    <div class="border-bottom clearfix">
        <div class="max-width-large w-100 padding-left-lg">
            {% include 'header.html' with query=query %}
        </div>
    </div>

и второй html код детали:

    <div>
        {% if extra_info.correct_query %}
            <div class="correct-query-wrapper padding-left-lg max-width-large pt-3 clear-both w-100 text-right">
                <span class="float-right text-danger">did you mean?</span>
                <span class="p-2 font-italic">
                    <a href="{% url 'search' %}?query={{ correct_query }}">
                        {{ correct_query }}
                    </a>
                </span>
            </div>
        {% endif %}
        <div class="padding-left-lg clearfix result-cart-wrapper max-width-large clear-both">
            {% include 'result_carts.html' with query=query %}
        </div>
    </div>

</body>
</html>

Когда я запускаю проект в localhost все в порядке, и браузер показывает полное содержимое первой части, а после получения результатов поиска показывает вторую часть. Но когда я развертываю проект на сервере, браузер показывает только небольшую часть первой части, а после получения второй части завершает первую часть и показывает вторую часть вместе.

Как это исправить?

1 Ответ

0 голосов
/ 26 февраля 2020

Проблема была в nginx конфигурации. Мне пришлось отключить буферизацию в nginx, добавив две эти строки:

proxy_buffering off;
proxy_request_buffering off;

Полный файл конфигурации nginx выглядит следующим образом:

server {
        location / {
                proxy_pass http://localhost:8000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;

                proxy_buffering off;
                proxy_request_buffering off;

                add_header Last-Modified $date_gmt;
                if_modified_since off;
                expires off;
                etag off;
        }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...