ich die folgende HTTP-Header für alle Antworten, die von den BaseX REST API aufnehmen möchten:BaseX REST API: Stellen Sie benutzerdefinierte HTTP-Response-Header
Access-Control-Allow-Origin: *
Ist das möglich?
ich die folgende HTTP-Header für alle Antworten, die von den BaseX REST API aufnehmen möchten:BaseX REST API: Stellen Sie benutzerdefinierte HTTP-Response-Header
Access-Control-Allow-Origin: *
Ist das möglich?
BaseX verwendet Jetty unter der Motorhaube. Sie können die web.xml
Datei ändern, um Jetty CORS-Header senden, aber entweder
jetty-servlets
Bibliothek oderjetty-servlets
Glas zu Ihrem $CLASSPATH
(BaseX bereits Schiffe hinzufügen jetty-servlet
, die eine andere Klasse ist, und stellen Sie sicher, die richtige Version zu holen, die mit dem übereinstimmt, was in BaseX enthalten ist).Fügen Sie folgende Richtlinien für die web.xml
Datei:
<web-app>
<!-- add those before the closing web-app tag: -->
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Beachten Sie, dass Jetty scheint nicht einen Platzhalter-Header Access-Control-Allow-Origin: *
zu unterstützen Posting: Während die Standard bereits
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
(setzen das in das <filter/>
Element), verwendet Jetty dies, um einen regulären Ausdruck zu konstruieren, und gibt immer den Wert des Anforderungskopfs Origin:
i zurück f matching, aber das sollte dir auch gut tun.
Ein Beispiel Anfrage:
$ curl -v -H "Origin: http://foo.example" http://admin:[email protected]:8984/rest
* Trying ::1...
* Connected to localhost (::1) port 8984 (#0)
* Server auth using Basic with user 'admin'
> GET /rest HTTP/1.1
> Host: localhost:8984
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.50.1
> Accept: */*
> Origin: http://foo.example
>
< HTTP/1.1 200 OK
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 152
< Server: Jetty(8.1.18.v20150929)
<
<rest:databases xmlns:rest="http://basex.org/rest" resources="1">
<rest:database resources="1" size="96234589">test</rest:database>
</rest:databases>
* Connection #0 to host localhost left intact
Vor diesem Hintergrund scheint eine ziemlich vernünftige Anfrage und was zu tun ist, könnte man standardmäßig
opening an issue enthalten die Bibliothek standardmäßig und vielleicht sogar ermöglicht CORS erfolgreich zu sein.
(die Bibliothek ist jetzt standardmäßig enthalten)
Vielen Dank für diese eingehende Antwort. Ich habe die Funktion angefordert: https://github.com/BaseXdb/basex/issues/1441 – Seb3736
Ich habe die Antwort leicht angepasst, so dass berücksichtigt wird, dass BaseX jetzt die Bibliothek versendet. –