Подтвердить что ты не робот

PHP $_COOKIE не полностью заполнен

Я потратил немного, пытаясь проследить основную причину конкретной ошибки Laravel, поскольку исходная проблема GitHub была закрыта без разрешения.

После некоторого времени эксперимента я обнаружил, что сеанс регенерировался, потому что cookie laravel_session был установлен в null. Отслеживая это как можно дальше, я обнаружил, что в index.php - до того, как Laravel когда-либо загружается - значение $_COOKIE повреждено... иногда

Примерно в 90% случаев, когда я звоню в свое приложение, мои файлы cookie выглядят так:

array:7 [
  "__unam" => "bc7c68-14f8d12a5ef-43097c02-213"
  "__utma" => "152883115.857409601.1438038184.1440538193.1440976773.14"
  "__utmc" => "152883115"
  "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
  "XSRF-TOKEN" => "eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9"
  "laravel_session" => "eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3ZUXC81OXl1QnpBRnR3a05kNXp1MEFoV2pLTmpIdz09IiwibWFjIjoiOThjMTU1MTE0ZTRjM2E2MGEzNGQ0MTcwODNhZmNlODMyZjM0MGViMjdmZjliMWZhNjE2M2Q0YzFlNWQxZDZiYyJ9"
]

Но тогда 10% времени выглядит так:

array:7 [
  "__unam" => "bc7c68-14f8d12a5ef-43097c02-213"
  "__utma" => "152883115.857409601.1438038184.1440538193.1440976773.14"
  "__utmc" => "152883115"
  "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
  "XSRF-TOKEN" => "eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9"
  "laravel_session" => "eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3Z"
]

Используя веб-прокси (Charles) для мониторинга сетевого трафика, проблема заканчивается на не - вся строка cookie отправляется, но сервер видит только частичное сообщение ( laravel_session cookie отключается)

Каждый раз, когда проблема возникает, она обрезается в точном в том же месте: 678 байт после начала строки cookie (1435 байт в текст необработанного HTTP-запроса). Странно, что тело запроса передается без вреда, и это означает после строку cookie в необработанном HTTP-запросе, так что это не связано с отказом TCP-соединения.

PATCH /api/employees/1 HTTP/1.1
Host: www.mywebsite.com
Content-Length: 23
Accept: application/json, text/plain, */*
Origin: http://www.mywebsite.com
X-XSRF-TOKEN: eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://www.mywebsite.com/admin/employees?location=1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: __unam=bc7c68-14f8d12a5ef-43097c02-213; __utma=152883115.857409601.1438038184.1440538193.1440976773.14; __utmc=152883115; __utmz=152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=k8qvmt8ccbhcqepbn7mib8kra6; XSRF-TOKEN=eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9; laravel_session=eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3ZUXC81OXl1QnpBRnR3a05kNXp1MEFoV2pLTmpIdz09IiwibWFjIjoiOThjMTU1MTE0ZTRjM2E2MGEzNGQ0MTcwODNhZmNlODMyZjM0MGViMjdmZjliMWZhNjE2M2Q0YzFlNWQxZDZiYyJ9

{"id":"1","show":false}

Я использую встроенный сервер разработки PHP (php -S 0.0.0.0:80). Я попытался использовать Apache, чтобы узнать, устраняет ли проблема эту проблему, и хотя кажется, что строка cookie всегда правильно встречается с Apache, у меня есть еще одна ошибка, когда PHP полностью сбой и сжигание при попадании на вызов file_put_contents. У меня есть следующий код:

try {
    echo "Writing... (LOCK_EX: " . LOCK_EX . ")<br />\n";
    file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
    echo "Done.";
} catch( Exception $e ) {
    echo "WHAT";
}
echo "Failed?";

Возвращается только Writing... (LOCK_EX: 2)<br />\n

Ничего из "Готово", "ЧТО" или "Сбой?".

Посмотрев как ps all, чтобы увидеть, висел ли сервер, я даже не вижу процесса Apache. Однако я знаю, что Apache работает, потому что, если я остановлю Apache (sudo apachectl stop), я перестаю получать любой ответ с сервера

4     0   807     1  20   0  15820   912 n_tty_ Ss+  tty4       0:00 /sbin/getty -8 38400 tty4
4     0   810     1  20   0  15820   916 n_tty_ Ss+  tty5       0:00 /sbin/getty -8 38400 tty5
4     0   815     1  20   0  15820   916 n_tty_ Ss+  tty2       0:00 /sbin/getty -8 38400 tty2
4     0   816     1  20   0  15820   920 n_tty_ Ss+  tty3       0:00 /sbin/getty -8 38400 tty3
4     0   819     1  20   0  15820   916 n_tty_ Ss+  tty6       0:00 /sbin/getty -8 38400 tty6
4     0  1029     1  20   0  15820   916 n_tty_ Ss+  tty1       0:00 /sbin/getty -8 38400 tty1
0     0  1057  9241  20   0  10016   880 -      R+   pts/2      0:00 ps all
0     0  5278  9239  20   0  12404  1212 wait   Ss   pts/8      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  5279  5278  20   0  22708  3660 n_tty_ S+   pts/8      0:00 bash -l
0     0  9240  9239  20   0  12404  1144 wait   Ss   pts/2      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  9241  9240  20   0  22776  3868 wait   S    pts/2      0:00 bash -l
0     0  9287  9239  20   0  12404  1148 wait   Ss   pts/4      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  9288  9287  20   0  22792  4040 n_tty_ S+   pts/4      0:02 bash -l
0     0 10740  9239  20   0  12404  1152 wait   Ss   pts/5      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 10741 10740  20   0  22756  3836 n_tty_ S+   pts/5      0:00 bash -l
0     0 17522 17476  20   0   1924   512 poll_s Ss+  pts/1      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t [email protected]_668 -d
0     0 18258 17476  20   0   1924   516 poll_s Ss+  pts/3      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t [email protected]_14 -d
0     0 20097  9239  20   0  12404  1204 wait   Ss   pts/9      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 20098 20097  20   0  22708  3808 wait   S    pts/9      0:00 bash -l
0     0 20134 20098  20   0 103624  2880 n_tty_ S+   pts/9      0:00 mysql -u root -p
0     0 30986 17476  20   0   1924   516 poll_s Ss+  pts/7      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t [email protected]_836 -d
0     0 31599  9239  20   0  12404  1204 wait   Ss   pts/6      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31603 31599  20   0  22708  3636 n_tty_ S+   pts/6      0:00 bash -l
0     0 31632  9239  20   0  12404  1152 wait   Ss   pts/10     0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31633 31632  20   0  22760  3828 n_tty_ S+   pts/10     0:00 bash -l
0     0 31811  9239  20   0  12404  1152 wait   Ss   pts/12     0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31812 31811  20   0  22708  3520 n_tty_ S+   pts/12     0:00 bash -l

Я действительно не уверен, что происходит (почему Apache не работает или почему встроенный сервер PHP отключает мою переменную $_COOKIE).

В качестве последней заметки я уже проверил разрешения на файл, который я пытаюсь записать:

-rwxr-xr-x 1 root root 10629 Mar 12 13:14 services.json

Значит, это не так.

Update

В предложении @Siguza я попытался добавить еще один файл cookie, чтобы узнать, что произойдет. При первом осмотре было похоже, что произошло какое-то очень странное поведение, когда я запускал dd( $request->cookies ) перед расшифровкой:

Success

ParameterBag {#40
  #parameters: array:9 [
    "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "__utma" => "152883115.857409601.1438038184.1440976773.1441571912.15"
    "__utmb" => "152883115.4.9.1441572254693"
    "__utmc" => "152883115"
    "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    "XSRF-TOKEN" => "eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ=="
    "laravel_session" => "eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwMEpybEQ3XC9cL0pDMzA1MXdEeHF3a09qbnRKTjdPMzRKdjdBeFFNQ1hkamw1THFQanlnUURoRjJndz09IiwibWFjIjoiYTkzNjdmYjYyYTMzODM2MmY2MjQyNzZhNDQ1YjY2NzQ3OTFiZjVjODIyZmYzYmE3YjhlNGM1ZjQ2NTk1MTczNyJ9"
  ]
}

Отказ

ParameterBag {#40
  #parameters: array:8 [
    "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "__utma" => "152883115.857409601.1438038184.1440976773.1441571912.15"
    "__utmb" => "152883115.4.9.1441572254693"
    "__utmc" => "152883115"
    "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
    "XSRF-TOKEN" => "eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ=="
    "laravel_session" => "eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwM"
  ]
}

Странно, что новый куки файл, который я добавил (еще одноКуки), полностью ушел, а сеанс laravel все еще усекается. Проверяя HTTP-запрос, я заметил, что в конце был добавлен yetAnotherCookie, поэтому обрезание всей строки разумно удалит его из списка:

PHPSESSID=k8qvmt8ccbhcqepbn7mib8kra6; __unam=bc7c68-14f8d12a5ef-43097c02-217; __utma=152883115.857409601.1438038184.1440976773.1441571912.15; __utmb=152883115.4.9.1441572254693; __utmc=152883115; __utmz=152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); XSRF-TOKEN=eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ%3D%3D; laravel_session=eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwMEpybEQ3XC9cL0pDMzA1MXdEeHF3a09qbnRKTjdPMzRKdjdBeFFNQ1hkamw1THFQanlnUURoRjJndz09IiwibWFjIjoiYTkzNjdmYjYyYTMzODM2MmY2MjQyNzZhNDQ1YjY2NzQ3OTFiZjVjODIyZmYzYmE3YjhlNGM1ZjQ2NTk1MTczNyJ9; yetAnotherCookie=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Я удалил все свои файлы cookie для домена и снова попробовал:

Success

ParameterBag {#40
  #parameters: array:4 [
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "XSRF-TOKEN" => "eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ=="
    "laravel_session" => "eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  ]
}

Отказ

ParameterBag {#40
  #parameters: array:4 [
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "XSRF-TOKEN" => "eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ=="
    "laravel_session" => "eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK"
  ]
}

На этот раз обрезано только yetAnotherCookie, а не laravel_session. Глядя на HTTP-запрос еще раз, этот файл cookie пробился в конец списка, несмотря на то, что был установлен первым (я полагаю, Chrome перечислил список файлов cookie?) Только теперь полный список был короче:

__unam=bc7c68-14f8d12a5ef-43097c02-217; XSRF-TOKEN=eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ%3D%3D; laravel_session=eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9; yetAnotherCookie=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Он отключился на 685 байт на этот раз вместо 678 из ранее. Любопытный и любопытный.

Обновление 2

Здесь еще один нечетный. Я попытался нажать на немного другую конечную точку. Вместо www.mywebsite.com/api/employees/1 я пинговал www.mywebsite.com/api/employees/10

В этот раз из строки cookie была удалена одна дополнительная буква. Это побудило меня взглянуть на весь необработанный HTTP-запрос еще один. Точно 1435 байтов в необработанный HTTP-запрос - это когда строка cookie была отключена.

Итак, я выполнил еще один эксперимент: я отправил огромный пользовательский заголовок, используя следующий javascript из браузера

$.ajax('/api/employees/1', {
method: 'PATCH',
headers: {'X-REALLY-LONG-HEADER': 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'},
success: function(data) { console.log(data); }
});

Я также немного изменил возвращаемое значение, потому что функция Laravel dd() обертывает возвращаемое значение во множестве HTML, что затрудняет интерпретацию в консоли. С действительно длинным заголовком, я получил следующее после нескольких попыток:

Cookies:
__unam = bc7c68-14f8d12a5ef-43097c02-217
XSRF-TOKEN = eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGd

Это было фактически 1460 байты в необработанном запросе... Я не уверен, как интерпретировать тот факт, что он вел себя по-другому, но это предполагает некоторый странный предел в 1450-й байт перед PHP встроенный сервер хранит на HTTP-запрос.

Обновление 3

Попытка обновить PHP до 5.6

Первый apt-get провалил меня. apt-get install --only-upgrade php5 только что установил немного более новый 5.5.9

Затем я загрузил источник из php.net и попытался построить из источника. По инструкциям INSTALL вы должны запустить ./configure перед запуском make и make install, поэтому я попробовал это. Через некоторое время я получил следующее:

...
checking for strftime... (cached) yes
checking which regex library to use... php
checking whether to enable LIBXML support... yes
checking libxml2 install dir... no
checking for xml2-config path... 
configure: error: xml2-config not found. Please check your libxml2 installation.

Я попробовал обновить это с помощью apt-get install libxml2 и получил следующее:

[email protected]:~/php-5.6.13# apt-get install libxml2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libxml2 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 200 not upgraded.

Так как ./configure сбил меня, и я не могу обновить libxml2, я попробовал просто установить:

[email protected]:~/php-5.6.13# make
make: *** No targets specified and no makefile found.  Stop.

Возможно, я просто некомпетентен как администратор сервера, но я не знаю, как установить PHP 5.6 без полезного файла MSI.

4b9b3361

Ответ 1

Поздравляем, вы обнаружили PHP-ошибку; Я только что сообщил об этом.

Теперь вы ничего не можете сделать, кроме ожидания исправления.

Как я уже отмечал в отчете об ошибке, причина в том, что заголовки настолько велики, что браузер разделяет его на несколько TCP-пакетов... и парсер HTTP в sapi/cli/php_http_parser.c в настоящее время не кажется резервное копирование буфера со значением заголовка в случае, если ему нужно дождаться следующего пакета и слить его со следующим пакетом позже. Следовательно, он заканчивается, чтобы быть усеченным.

Как иногда код говорит больше, чем текст: простой случай воспроизведения: http://git.php.net/?p=php-src.git;a=commitdiff;h=37d814b84cff3678a2e1d56ea9d3ba3c35082e13