Same Origin Policy, Webserver auf LPC1766

OP #3266849
Lesenswert?

Hey Leute

Ich habe auf meinem LPC1766 den uIP Webserver laufen. (Download: 
https://www.olimex.com/Products/ARM/NXP/LPC1766-STK/)

Um XMLHttpRequests domainübergreifend zu machen, muss ich den Header 
Response ändern in z. B.
1
Access-Control-Allow-Origin: *

Bevor ich das ganze auf dem Mircocontroller implementiere, habe ich auf 
meinen "normalen" Webserver getestet und es geht so weit. Dazu habe ich 
einfach in der Datei, die per XMLHttpRequest
1
xmlhttp.open("POST","http://www.domain2.de/1.php",true);

aufgerufen wird, den Header geändert auf
1
<?
2
    header("Access-Control-Allow-Origin: *");
3
?>

Leider ist das ganz jetzt ja in php und auf dem uIP Webserver läuft kein 
PHP-Server mit. Jetzt ist die Frage, wie den Header noch ändern kann, so 
dass es auf dem uIP-Webserver implementieren kann.

Hier http://enable-cors.org/server.html gibt es eine Auswahl an Methode, 
wie ich den Header ändern kann. Allerdings weiß ich nicht genau, was 
davon jetzt auf dem uIP-Webserver installiert ist.

ich hoffe, ihr könnt mir helfen. Vielen Dank.
#3266857
Lesenswert?

Hi,

irgendwo muss dein Webserver "HTTP/1.x 200 Document follows" o. ä. 
ausgeben.

Genau danach kannst du die Direktive für Same Origin Policy ausgeben.

Mein AVR-Serverchen spuckt für JSON-Dateien folgendes aus:
1
HTTP/1.0 200 Document follows
2
Server: AVR_Small_Webserver
3
Access-Control-Allow-Origin: *
4
Content-Type: application/json

Such doch man ach entsprechender Stelle im Quellcode. Zumindest HTTP und 
200 muss vorkommen.
OP #3266865
Lesenswert?

Sorry, aber das sind jetzt ein paar Infos zu viel für mich.

Also im Quellcode des Javascripts, dass auf dem Webserver läuft finde 
ich hier "200":
1
http.open(serverActionMethod, paramURL, true);
2
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
3

4
http.onreadystatechange = function() {
5
    if(http.readyState == 4 && http.status == 200) {
6
        if(callback != undefined && typeof callback == 'function') callback(http.responseText);
7
    }
8
}
9
http.send(Parameter);

Das meinst du aber bestimmt nicht.

Wo könnte ich noch danach suchen?

Vielen Dank für deine Mühe
#3266888
Lesenswert?

Hi,

das was im Browser verarbeitet wird, ist an der Stelle egal,
du musst in den Header ja durch den Server senden lassen.

Der ist bei dem Beispiel etwas komisch geschrieben (warum nicht einfach 
den String in den Array schreiben, anstatt jedes Zeichen einzeln in 
Hex...), such einfach mal nach http_header_200:

1
\LPC1766-STK\LPC1766-STK\uip_webserver\uip\httpd\httpd.c:234
2
\LPC1766-STK\LPC1766-STK\uip_webserver\uip\httpd\http-strings.c:46
3
\LPC1766-STK\LPC1766-STK\uip_webserver\uip\httpd\http-strings.h:16

Wenn du es einfach haben willst, musst du nur die letzten beiden Stellen 
anpassen.
Gast #3267017
Lesenswert?

Immer noch dabei :-)

Ob das tatsächlich so funktioniert weiss ich nicht, aber er meint:

const char http_header_200[16] =
// "HTTP/1.0 200 OK"
{0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, 0x30, 0x30, 
0x20, 0x4F, 0x4B, };

ersetzen durch:

const char http_header_200[??] =
// "HTTP/1.0 200 Document follows\r\nServer: 
uIP\r\nAccess-Control-Allow-Origin: *\r\nContent-Type: 
application/json\r\n"
{??, };

Noch Stringlänge und HEX ergänzen ...
Persönliche Seite #3267337
Lesenswert?

Flo Haase schrieb:
> Also im Quellcode des Javascripts, dass auf dem Webserver läuft

Das Javascript läuft nicht auf dem Server, sonder auf dem Client...

Flo Haase schrieb:
> Leider weiß ich nicht, wie ich sie anpassen soll

Wie ein HTTP Header aufgebaut ist steht z.B. hier:
https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Es kann auch hilfreich sein, sich z.B. mit FireBug mal die Requests 
anzuschauen, dann sieht man was jede Seite sendet und dass kann dann 
auch Aufschluss geben.

Flo Haase schrieb:
> Um XMLHttpRequests domainübergreifend zu machen, muss ich den Header
> Response ändern

Zwischen welchen "Domains" willst du den zugreifen? ggf. kannst du auf 
der Ursprungsdomain auch einfach einen Proxy einrichten, der Anfragen an 
deinen µc weiterreicht.
OP #3279453
Lesenswert?

@ Lothar

Ja, ich bin jetzt wieder dran :) wegen den Prüfungen hatte ich ja eine 
Pause eingelegt :)

@ Läubi

Zur Untersuche der Header habe ich bis jetzt die mitgelieferten 
Entwickler-Tools von Safari oder Chrome benutzt. Hier sind auf jeden 
Fall mal die Einträge zu sehen, die mich interessieren.

Derzeit sind die "Domains" nur 2 IP-Adresse in meinen lokalen Netzwerk. 
192.168.0.104 und 105.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren