Data z POST request body (reactjs appka) se po cestě do php ztratí
- Jan Mikeš
- Člen | 771
Ahoj, děje se nám dost divná věc. Ve zkratce, mám velké podezření, že nginx zahazuje POSTy z react appky a nevím proč.
Postupuji následovně, v index.php (nette appka) si dám breakpoint a
sleduju, co tam přijde za get a post parametry. Pokud pošlu cURL s postem, je
to paráda, vše šlape. Pokud pošlu postman request, vše taky šlape. Pokud pošlu GET request
z react appky, taky vše pohoda.
Problém nastává, když chceme posílat POST requesty, request vypadá
v pořádku, ale v PHP je $_POST
prázdné. Více asi napoví
screenshoty.
POST cURL:
curl -X POST -d 'email=test@odbav.to&password=test' "http://odbavto-new.dev/login"
Screen z postmana
Request z react appky vs stav v breakpointu kde ty posty jsou?
v react appce máme následující kód:
axios({
method: 'POST',
url: 'http://odbavto-new.dev/login',
data: {'email': 'test@odbav.to', 'password': 'test'}
})
V nginxu loguju $request_body
a pro ten post request z reactu
se objeví toto, takže tam nějaká data asi dotečou, ale ztratí se a do PHP
nedorazí:
{\x22email\x22:\x22test@odbav.to\x22,\x22password\x22:\x22test\x22}
Řeším to už 2 dny a jsem z toho úplně na prášky, ani google už není nápomocen, budu velmi rád za jakékoliv nakopnutí.
Ještě pro jistotu, takto vypadá moje nginx konfigurace:
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /dev/null;
error_log /usr/local/var/log/nginx/error.log;
log_format postdata $request_body;
access_log /usr/local/var/log/nginx/postdata.log postdata;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
listen 443 ssl http2;
ssl_certificate ssl/nginx.crt;
ssl_certificate_key ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE, HEAD' always;
add_header 'Access-Control-Allow-Headers' 'X-Requested-With,X-Authorization,Accept,Content-Type,Origin' always;
server_name _;
server_tokens off;
index index.php index.html index.htm;
set $basepath "/Users/janmikes/Sites";
set $domain $host;
if ($domain ~* "^([\w\d\-]*)\.dev$") {
set $domain $1;
}
if ($domain ~* "^([\w\d\-]*)\.([\w\d\-]*)\.dev$") {
set $domain $2;
}
set $rootpath "${domain}";
if (-d $basepath/$domain/www) {
set $rootpath "${domain}/www";
}
if (-d $basepath/$domain/public) {
set $rootpath "${domain}/public";
}
root $basepath/$rootpath;
location ~ /\.|^\. {
deny all;
}
location ~ \.(neon|ini|log|yml)$ {
deny all;
}
location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico|txt|bmp|pdf|doc|docx|ppt|pptx|zip)$ {
access_log off;
log_not_found off;
expires max;
}
location = /robots.txt { access_log off; log_not_found off; }
location = /humans.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }
location ~* [^/]\.php(/|$) {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index $document_root/index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root/$fastcgi_path_info;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ index.php$is_args$args;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With,X-Authorization,Accept,Content-Type,Origin';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
}
}
- Jan Mikeš
- Člen | 771
Na slacku se mi dostalo velice rychlé odpovědi od @mrtnzlml a nerad bych ochudil náhodné kolemjdoucí o řešení :-).
mrtnzlml [5:59 PM]
Protože do POST se automaticky necpe vše, ale jen formát formuláře, protože jinak PHP neví jak JSON zpracovat (na pole).
[5:59]
http://php.net/…les.post.php:
[6:00]
Tohle je lepší na pochopení: http://stackoverflow.com/…4856/3135248