BaseX REST API:设置自定义 HTTP 响应 header
BaseX REST API: Set custom HTTP response header
我想将以下 HTTP header 添加到 BaseX REST API 的所有响应中:
Access-Control-Allow-Origin: *
这可能吗?
BaseX 在底层使用 Jetty。您可以修改 web.xml
文件使 Jetty 发送 CORS headers,但是
- 至少使用添加了
jetty-servlets
库的 BaseX 8.6.3 或
- 必须将
jetty-servlets
jar 添加到您的 $CLASSPATH
(BaseX 已经发布 jetty-servlet
,这是一个不同的 class;并确保获取适当的版本匹配 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 似乎不支持发布通配符 header Access-Control-Allow-Origin: *
:而默认值已经
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
(将其放入 <filter/>
元素),Jetty 使用它来构建正则表达式,并且始终 returns Origin:
请求的值 header 如果匹配,但这也应该对您有用。
请求示例:
$ 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
鉴于这似乎是一个相当合理的要求和要做的事情,您可能会成功 opening an issue 默认包含该库,甚至可能默认启用 CORS。(现在默认包含该库)
我想将以下 HTTP header 添加到 BaseX REST API 的所有响应中:
Access-Control-Allow-Origin: *
这可能吗?
BaseX 在底层使用 Jetty。您可以修改 web.xml
文件使 Jetty 发送 CORS headers,但是
- 至少使用添加了
jetty-servlets
库的 BaseX 8.6.3 或 - 必须将
jetty-servlets
jar 添加到您的$CLASSPATH
(BaseX 已经发布jetty-servlet
,这是一个不同的 class;并确保获取适当的版本匹配 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 似乎不支持发布通配符 header Access-Control-Allow-Origin: *
:而默认值已经
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
(将其放入 <filter/>
元素),Jetty 使用它来构建正则表达式,并且始终 returns Origin:
请求的值 header 如果匹配,但这也应该对您有用。
请求示例:
$ 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
鉴于这似乎是一个相当合理的要求和要做的事情,您可能会成功 opening an issue 默认包含该库,甚至可能默认启用 CORS。(现在默认包含该库)