Пробелм
Я использую сервер узла (sqlpad) через обратный прокси-сервер Apache2.
По некоторым запросам сервер узла возвращает код состояния 304 без Content-Type при прямом доступе. Однако при доступе через обратный прокси код состояния изменяется на 200, а Content-Type добавляется со значением text / html. Добавление Content-Type приводит к тому, что приложение не загружает JS и CSS, потому что X-Content-Type-Options: nosniff находится в заголовке.
Я действительно не хочу вносить изменения в сервер узла, поскольку это не мой проект. Я хотел бы исправить это с помощью конфигурации обратного прокси.
Как я могу настроить Apache2 ProxyPass для пересылки исходного ответа 304 или, по крайней мере, чтобы не заполнять отсутствующий Content-Type значением по умолчанию?
Вот моя специфика:
Конфигурация
# /etc/apache2/sites-enabled/xxxx.conf
...
<Location "/sqlpad">
ProxyPass http://x.x.x.x:xxxx # IP address of Node server
ProxyPassReverse http://x.x.x.x:xxxx # IP address of Node server
</Location>
Заголовки
Исходный запрос / ответ (без прокси):
Request Url: http://xxxx/sqlpad/static/js/main.266789c5.js
Request Method: Get
Status: 304 Not Modified
Response Headers:
HTTP/1.1 304 Not Modified
X-DNS-Prefetch-Control: off
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Referrer-Policy: same-origin
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Sat, 26 Oct 1985 08:15:00 GMT
ETag: W/"1d86fc-7438674ba0"
Date: Wed, 13 Jun 2018 15:04:20 GMT
Connection: keep-alive
Request Headers:
GET /sqlpad/static/js/main.266789c5.js HTTP/1.1
Host: xxxx
Connection: keep-alive
If-None-Match: W/"1d86fc-7438674ba0"
If-Modified-Since: Sat, 26 Oct 1985 08:15:00 GMT
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept: */*
Referer: http://localhost:56173/sqlpad/signin
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Запрошенный запрос / ответ:
Request Url: http://xxxx/sqlpad/static/js/main.266789c5.js
Request Method: Get
Status: 200 OK
Response Headers:
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 496
Content-Type: text/html; charset=utf-8
Date: Wed, 13 Jun 2018 15:18:29 GMT
ETag: W/"320-Lp3a/E+wIigPW+CnI/Elyd7OYoA-gzip"
Keep-Alive: timeout=5, max=98
Referrer-Policy: same-origin
Server: Apache/2.4.33 (Ubuntu)
Strict-Transport-Security: max-age=15552000; includeSubDomains
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-XSS-Protection: 1; mode=block
Request Headers:
GET /sqlpad/static/js/main.266789c5.js HTTP/1.1
Host: xxxx
Connection: keep-alive
If-None-Match: W/"320-Lp3a/E+wIigPW+CnI/Elyd7OYoA-gzip"
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept: */*
Referer: http://xxxx/sqlpad
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: __zlcmid=xxxx; PHPSESSID=xxxx
Я использую Apache / 2.4.33 в Ubuntu 16.04.4
Со статусом ответа 304 (не изменено) HTTP-клиент не отправляет никакого контента. Вместо этого используется контент из клиентского кеша. Следовательно, нет вопроса об изменении его Content-type. Сервер Apache HTTPD пересылает 304 ответа от исходного сервера, как и в конфигурации по умолчанию. У меня есть несколько приложений nodejs за прокси-сервером Apache HTTP, и я подсчитал количество ответов 200 и 304 на обновление страницы с использованием прокси и прямого доступа к приложениям. Они такие же. Поэтому я сильно подозреваю, что причина проблемы, с которой вы столкнулись, не в коде ответа, а в чем-то другом.