2017-03-21 1 views

Antwort

3

BaseX verwendet Jetty unter der Motorhaube. Sie können die web.xml Datei ändern, um Jetty CORS-Header senden, aber entweder

  • Verwendung mindestens BaseX 8.6.3, die hinzugefügt, um die jetty-servlets Bibliothek oder
  • haben die jetty-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)

+0

Vielen Dank für diese eingehende Antwort. Ich habe die Funktion angefordert: https://github.com/BaseXdb/basex/issues/1441 – Seb3736

+0

Ich habe die Antwort leicht angepasst, so dass berücksichtigt wird, dass BaseX jetzt die Bibliothek versendet. –

Verwandte Themen