Spatne prelozeni http requestu na routu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Blujacker
Člen | 89
+
0
-

Zdravim,

narazili jsme na problem pri vytvareni jednoho API pro naseho partnera. Posilaji se GET requesty pres apache nicmene Nette si routu interpretuje z nejakeho duvodu jako http://IP:porthttp://IP:port/akce a skonci to chybou No route for HTTP request. Toto chovani se objevuje pouze pokud posilaji request pres jejich interni aplikaci (pokud je napr. pouzit browser nebo Postman, vse funguje).

V nette exception.log je toto:

[2015-07-24 10-10-49] Nette\Application\BadRequestException: No route for HTTP request. in /home/domains/api/vendor/nette/application/src/Application/Application.php:117  @  http://IP:7088http://IP:7088/customer/get-customer?id=0010002016&type=xml  @@  exception-2015-06-03-13-50-03-99bee5084eb9816e51f5183d9c22e28f.html

V apache accesslogu je toto:

[24/Jul/2015:11:10:49 +0200] "GET http://IP:7088/customer/get-customer?id=0010002016&type=xml HTTP/1.1" 500 733 "-" "-"

Je mozne, ze se jedna o chybu v Nette, protoze dle apache logu prisel spravny request ale Nette si ho spatne prelozilo.

Dekuji!

Unlink
Člen | 298
+
+1
-

Http funguje tak, že sa pripojíš na daný server (IP:7088) a potom už len v GET je resource, takže by tam malo byť len customer/get-customer?id=0010002016&type=xml problém bude očividne v tej klientskej aplikácii.

Editoval Unlink (24. 7. 2015 17:37)

Blujacker
Člen | 89
+
0
-

Jasny, ale podle apache accesslogu to prislo spravne (tedy ip:port/akce + get). Akorat Nette to nejak spatne prelozilo na ip:portip:port/akce + get. Proto me napadlo, ze by chyba / problem mohl byt v Nette

llook
Člen | 407
+
0
-

Není pravda, v požadavku může být klidně i absolutní URL a server si s ním musí umět poradit. Viz https://tools.ietf.org/html/rfc7230#… (podobně to bylo i v RFC 2616).

Blujacker
Člen | 89
+
0
-

Specifikaci jsem si precetl, ale nejsem o moc moudrejsi. Mame tedy nechat klienta hledat chybu, nebo se jedna o problem u nas? Podle toho, ze v apache accesslogu to vypada naprosto stejne jako request ktery je udelan treba pres browser a spadne to, nych to videl na to Nette.

Dekuji

Unlink
Člen | 298
+
0
-

@llook to že by to mal server vedieť je jedna vec, ale to že to apache nevie, nieje problém nette.
Ale ak tomu dobre chápem, tak podľa tej istej špecifikácie musia klienti posielať relatívnu URL

To allow for transition to the absolute-form for all requests in some
future version of HTTP, a server MUST accept the absolute-form in
requests, even though HTTP/1.1 clients will only send them in
requests to proxies.

Takže chyba je v klientskej aplikácii :)

Blujacker
Člen | 89
+
0
-

Dekuji, to jsem si myslel. Da se nejak v ramci Nette toto vyresit (aby fungovali i absolutni URL)? Ja jsem se snazil nasimulovat to co delaji oni (tj. posilat absolutni URL), ale nepovedlo se mi to.

Porad mi to prijde zvlastni protoze podle apache logu se zda ze je vse v poradu a problem nastava az v Nette

Unlink
Člen | 298
+
0
-

Ale ako to podľa access logu môže vyzerať ok, veď ostatné requesty tam majú relatívne cesty, nie?

Nasimulovať to môžeš nejako takto:
https://gist.github.com/…2df1e514831e

Editoval Unlink (25. 7. 2015 9:22)

Blujacker
Člen | 89
+
0
-

Nj, maji relativni cesty, ja si toho vubec nevsiml. Dekuji za radu i priklad!