nginx php-fpm переписывает headers?

Небольшой легаси php проект (mvc) переехал на с апача на nginx+php-fpm. Вроде работает. Однако в некоторых ajax запросах передается header, примерно вот так

...
$.ajax({
//cache: false,
url: url_request,
method: 'post',
dataType: 'json',
headers: {
token: _token
},
...

в данном случае token со значением _token (значение берется из скрытого поля, генерируется постоянно, не суть). В общем когда был apache, то php функция getallheaders() возвращает заголовок в виде массива, среди элементов массива есть этот самый token, вот так

...
    [Accept] => application/json, text/javascript, */*; q=0.01
    [Accept-Language] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
    [Accept-Encoding] => gzip, deflate
    [token] => $2y$10$pW/C1Hxr0pKcUE/UvELNne.GIQlfuH1wm2nrggVKSXPgLeOjFWKdi

...

ну и далее приложение проверяет на валидность этот токен.

Когда этот же запрос выполняется в связке nginx+php-fpm вырисовывается вот такая картина:

...
    [X-Requested-With] => XMLHttpRequest
    [Token] => $2y$10$BrCwThyR8BPCxMCIxmWlXu04hQwsVInOnhv7G0yfyPcfMRDMcV24C
    [Content-Type] => application/x-www-form-urlencoded; charset=UTF-8
    [Accept-Encoding] => gzip, deflate
    [Accept-Language] => ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
    [Accept] => application/json, text/javascript, */*; q=0.01
...

Как видно ключ массива Token написан с большой буквы, соответственно приложение его не находит при валидации. Вопрос: почему так просходит? Кто его переписывает с большой буквы? Мозилла заголовок от ajax формирует правильный, с маленькой буквы, а бэкенд видит его с большой.

    XHRPOST
    [HTTP/1.1 200 OK 24ms]
    POST http://blabla-site/request/value
    Состояние 200 OK
    Версия HTTP/1.1
    Передано887 б (размер 868 б)
    Referrer policystrict-origin-when-cross-origin
    Приоритет запроса Highest
    Поиск в DNS Система
    Cache-Control no-store, no-cache, must-revalidate
    Connection keep-alive
    Content-Encoding gzip
    Content-Type text/html; charset=UTF-8
    Date Mon, 22 Apr 2024 09:52:30 GMT
    Expires Thu, 19 Nov 1981 08:52:00 GMT
    Pragma no-cache
    Server nginx
    Transfer-Encoding chunked
    Vary Accept-Encoding
    X-Powered-By PHP/8.1.24

    POST /request/value HTTP/1.1
    Host: blabla-site
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    token: $2y$10$zGoQO4qSgcQlkn4Dy7pF9.7hUDXGDEqA5qVqvg/lv3f3gPWbcRz4u
    X-Requested-With: XMLHttpRequest
    Content-Length: 12
    Origin: http://blabla-site
    Connection: keep-alive
    Referer: http://blabla-site
    Cookie: PHPSESSID=k43o0v1kr7gt5jv2iubvugs922

Может приложение неверной функцией считывает заголовки и php-fpm не их так выводит? на всякий случай фрагмент конфига nginx.conf

...
 sendfile                    on;
    tcp_nopush                  on;
    tcp_nodelay                 on;
    reset_timedout_connection   on;
    keepalive_timeout           120;
    keepalive_requests          1000;
    types_hash_max_size         4096;
    server_tokens               off;
    send_timeout                30;
    client_body_timeout         30;
    client_header_timeout       30;
    server_names_hash_max_size  4096;

    client_max_body_size        10m;
    client_body_buffer_size     128k;
    large_client_header_buffers 8 64k;
    client_body_temp_path       /var/cache/nginx/client_temp;

    proxy_connect_timeout       60;
    proxy_send_timeout          60;
    proxy_read_timeout          60;
    proxy_buffer_size           4k;
    proxy_buffers               8 16k;
    proxy_busy_buffers_size     64k;
    proxy_temp_file_write_size  64k;
    proxy_temp_path             /var/cache/nginx/proxy_temp;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
...

и фрагмент конфига server:

...
 try_files  $uri =404;
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index index.php
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED $fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param HTTPS on;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
...

Ответы (0 шт):