Quarkus, CORS and Missing HTTP Headers 📎
A JAX-RS endpoint:
import java.net.URI;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/hello")
public class HelloResource {
@POST
@Produces(MediaType.TEXT_PLAIN)
public Response post(String content) {
var uri = URI.create("/id" + System.currentTimeMillis());
return Response.created(uri).build();
}
}
with activated CORS in application.properties
:
quarkus.http.cors=true
...and accessed with browser's fetch from a different domain / port:
const sendPost = async _ => {
const response = await fetch("http://localhost:8080/hello", {
method: 'POST',
body:'hello from js'
});
const headerContent = response.headers.get('Location');
console.log('Location header',headerContent);
}
sendPost();
won't reveal the headers: Location header null
.
To access the headers from JavaScript, you will have to list them in Quarkus' configuration:
quarkus.http.cors.exposed-headers=Location
Since curl
is not a browser, the following command: curl -i -XPOST -d'hello' localhost:8080/hello
always returns all headers:
HTTP/1.1 201 Created
Content-Length: 0
Location: http://localhost:8080/id1595909973814
Looks like a bug, but it is actually a feature.