Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

NGINX + CORS, ne salje Access-Control-Allow-Origin za code 200

[es] :: Linux/UNIX serveri i servisi :: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 200

[ Pregleda: 1854 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 4871
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+464 Profil

icon NGINX + CORS, ne salje Access-Control-Allow-Origin za code 20015.06.2014. u 11:37 - pre 69 meseci
Pozdrav drustvo,

slabo dolazim na ovaj deo foruma ali ovog puta me muka naterala :(

Kao sto se iz naslova vidi, imam NGINX server na Debianu (nginx 1.2.1-2.2+wheezy2), uredno sve podeseno, radi "uglavnom" sve kako treba.

Medjutim nastao mi je problem sa cros-domain validacijom za JS i XMLHttpRequest.

Naime, za podesavanje CORS-a je potrebno u konfiguraciji servera uraditi ovako nesto:
Code:


#… ostala server podesavanja …

server_name mojdomen.com

location /api/ {
        
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' 'https://dev.mojdomen.com';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'POST';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        return 204;
    }
     
    if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' 'https://dev.mojdomen.com';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'POST';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    }

    index  index.html index.htm index.php;
    try_files $uri /api/index.php?$args;

}



Kada napravim XMLHttpRequest na originalnom/dozvoljenom domenu "https://mojdomen.com" sve naravno uredno prodje.
Medjutim kada to pokusam da uradim sa "https://dev.mojdomen.com", npr iz FireFox, on pocne da se zali da to nije dozvoljeno i da nije specificiran Access-Control-Allow-Origin header.
Na isti problem mi se zale i developeri koji to koriste za neku mobilnu aplikaciju.

Dakle kada uradim OPTIONS request dobijem sve kako treba (taj zahtev se po specifikaciji poziva automatski iz JS, tkz pre-flight) i sve specificirane dodatne headere.
Ali kada zatim sledi POST koji stvarno treba da povuce potrebne podatke, dobijem "klasican" response sa standardnim hederima a ovim specificiranim dodatnim headerima nema ni traga ni glasa :(

Svasta sam probao ali jednostavno NGINX za POST request nece da vrati nista sto je specificirano sa direktivama add_header.

I da, sve je pod HTTPS ako to ima veze ...

U cemu je tu problem, gde gresim? Da nije bug u NGINX?





Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15203
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2313 Profil

icon Re: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 20015.06.2014. u 13:03 - pre 69 meseci
kada ga koristis kao rev.proxy onda moras da dodas hide_header

Code:

        add_header 'Access-Control-Allow-Origin' 'https://dev.mojdomen.com';
        proxy_hide_header 'Access-Control-Allow-Origin';

        add_header 'Access-Control-Allow-Credentials' 'true';
        proxy_hide_header 'Access-Control-Allow-Credentials';

        add_header 'Access-Control-Allow-Methods' 'POST';
        proxy_hide_header 'Access-Control-Allow-Methods';

        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        proxy_hide_header 'Access-Control-Allow-Headers';


koristis headers_more (http://wiki.nginx.org/NginxHttpHeadersMoreModule) ili ?
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 4871
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+464 Profil

icon Re: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 20015.06.2014. u 13:06 - pre 69 meseci
Hmm, nije mi reverzni proxy, srandalone webserver sa FCGI.
Trenutno ne koristim taj HeaderMore modul (morao bih da rekompajliram server, koristio sam stock sa repoa).
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15203
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2313 Profil

icon Re: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 20015.06.2014. u 13:21 - pre 69 meseci
ni ja ne trosim taj more .. mislim da ovo proxy_hide_header treba i ako
je standalone ali to vec ne znam 100%

takodje, dodaj neki header ispod ifova (za uvek) neki obican tipa

add_header 'kuku-lele-sta-me' 'snaslo';

pre index posle drugog ifa .. pa pogledaj dal ti se taj heder pojavljuje
mozda je problem sa request_method .. mozda treba if ($request_methid ~*
'options') ..
 
Odgovor na temu

mikikg
System administrator
Srbija

Član broj: 3779
Poruke: 4871
*.dynamic.isp.telekom.rs.

Sajt: yu3ma.net


+464 Profil

icon Re: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 20015.06.2014. u 17:34 - pre 69 meseci
Nasao sam sta je problem uz Bogdanovu pomoc, ovi add_header moraju da idu uz blok koji hvata .php lokaciju


Code:
    location /api/ {

        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' 'https://dev.mojdomen.com';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'POST,GET';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Content-Length, User-Agent, Pragma, Cache-Control';
            return 204;
        }

        index  index.html index.htm index.php;
        try_files $uri /api/index.php?$args;
    }

    ########################################
    # pass the PHP scripts to FastCGI socket
    ########################################
    location ~*\.php$ {
        fastcgi_pass unix:/tmp/php.socket;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include         fastcgi_params;
        
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'POST,GET';
        add_header 'Access-Control-Allow-Headers' 'Content-Type, Content-Length, User-Agent, Pragma, Cache-Control';
    }


Naravno, ovaj deo koji je vezan za PHP moze da se resi na nivou same aplikacije tako da PHP izbacuje te hedere a ne webserver, dodaju se ovi headeri u skripti:

Code:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-Type, Content-Length, User-Agent, Pragma, Cache-Control');

Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
 
Odgovor na temu

[es] :: Linux/UNIX serveri i servisi :: NGINX + CORS, ne salje Access-Control-Allow-Origin za code 200

[ Pregleda: 1854 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.