[php] http OPTIONS methode (geen GET/POST maar OPTIONS)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Om netjes CrossDomain AJAX te doen, gebruik ik CORS en daarbij probeert Firefox eerst een OPTIONS request te doen op een URL die ik met een XMLHttpRequest wil ophalen.

Hierbij geeft firefox de error: "HTTP Request <url> returned status 0".

Weet iemand hoe ik in PHP een OPTIONS request afvang/beantwoord?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Weet iemand hoe ik in PHP een OPTIONS request afvang/beantwoord?
Niet. afaik komt een OPTIONS request niet verder dan de webserver. Wanneer je hier iets mee wilt zul je dit in Apache / ISS / welke webserver je ook maar gebruikt af moeten handelen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 16:20
Juup schreef op maandag 17 mei 2010 @ 21:05:
Om netjes CrossDomain AJAX te doen, gebruik ik CORS en daarbij probeert Firefox eerst een OPTIONS request te doen op een URL die ik met een XMLHttpRequest wil ophalen.

Hierbij geeft firefox de error: "HTTP Request <url> returned status 0".

Weet iemand hoe ik in PHP een OPTIONS request afvang/beantwoord?
BV
PHP:
1
2
3
4
5
<?php
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    // Whatever je moet teruggeven als response... 
        echo 'options...'; 
}


code:
1
2
3
4
5
6
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OPTIONS /~rutgerw/method.php
options...


Dus je kan $_SERVER['REQUEST_METHOD'] bekijken.

Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Bij mijn weten zet mpd_php vanaf versie 4 een OPTIONS request wel door naar het php script.

Anders zou ik van apache zo'n response moeten krijgen:
code:
1
2
3
Content-Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH,
PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE


Maar hij geeft dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Date:   Mon, 17 May 2010 19:35:28 GMT
Server: Apache/2.2.11
X-Powered-By:   PHP/5.2.9
Access-Control-Allow-Origin:    http://mijndomain.com
Cache-Control:  no-store, no-cache, must-revalidate
Last-Modified:  Mon, 17 May 2010 18:51:03 GMT
Expires:    Mon, 17 May 2010 19:35:28 GMT
Content-Length: 34
Content-Type:   text/html;charset=utf-8
Set-Cookie: cookie
Keep-Alive: timeout=15, max=10000
Connection: Keep-Alive

Hij zegt dus dat de content-length 34 is maar volgens Firebug is er geen content.

[ Voor 8% gewijzigd door Juup op 17-05-2010 21:40 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
rutgerw schreef op maandag 17 mei 2010 @ 21:36:
PHP:
1
2
3
4
5
<?php
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    // Whatever je moet teruggeven als response... 
        echo 'options...'; 
}
Ja het werkt! (in telnet)
Firefox geeft nog steeds dezelfde error :(
Ik zal eens kijken wat voor response hij eigenlijk verwacht.

Edit:

Eindelijk werkt het.
Als je xhr.withCredentials=true gebruikt (om het cookie meegestuurd te krijgen) moet de server response een extra header zetten:
code:
1
Access-Control-Allow-Credentials: true



Dus in totaal moet je server op het OPTIONS request 5 headers zetten:
PHP:
1
2
3
4
5
header('Access-Control-Allow-Origin: http://mydomain.com');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: X-XXXXX'); #wat er in de Access-Control-Request-Headers staat
header('Access-Control-Allow-Max-Age: 1728000');

[ Voor 46% gewijzigd door Juup op 17-05-2010 22:40 . Reden: eindelijk werkend gekregen ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.