我想在BaseX REST API的所有响应中包含以下http头:

Access-Control-Allow-Origin: *

这可能吗?

最佳答案

Basex在引擎盖下面使用防波堤。您可以修改web.xml文件使jetty发送cors头,但是
至少使用Basex 8.6.3添加jetty-servlets库或
必须将jetty-servletsjar添加到$CLASSPATH(basex已经发布了jetty-servlet,这是一个不同的类;请确保获取与basex中包含的内容匹配的适当版本)。
web.xml文件中包含以下指令:

<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>

请注意,jetty似乎不支持发布通配符头:而默认值已经是
<init-param>
     <param-name>allowedOrigins</param-name>
     <param-value>*</param-value>
</init-param>

(将其放入Access-Control-Allow-Origin: *元素中),jetty使用它来构造正则表达式,如果匹配,则始终返回<filter/>请求头的值,但这也应该很好地为您服务。
示例请求:
$ curl -v -H "Origin: http://foo.example" http://admin:admin@localhost: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

考虑到这似乎是一个相当合理的请求和要做的事情,您可能会成功地在默认情况下包含库,甚至在默认情况下启用cors。(库现在默认包含)

关于rest - BaseX REST API:设置自定义HTTP响应 header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42932689/

10-11 10:36