In version 73 Google Chrome introduced support for Signed HTTP exchanges and changed their default Accept header from text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 to text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3. Apparently eXist's RESTXQ implementation is not able to parse the new header and accessing a RESTXQ resource from Chrome (or using the above header in another client) causes an Internal Server Error like this:
HTTP ERROR 500
Problem accessing /exist/restxq/info. Reason:
Server Error
Caused by:
javax.servlet.ServletException: javax.servlet.ServletException: An error occurred while processing request to /exist/restxq/info: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:753)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:502)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: javax.servlet.ServletException: An error occurred while processing request to /exist/restxq/info: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:370)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:859)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
... 11 more
Caused by: java.lang.IllegalArgumentException: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.exquery.http.AcceptHeader.<init>(AcceptHeader.java:78)
at org.exquery.restxq.impl.RestXqServicesMap.get(RestXqServicesMap.java:170)
at org.exquery.restxq.impl.RestXqServiceRegistryImpl.findService(RestXqServiceRegistryImpl.java:99)
at org.exist.extensions.exquery.restxq.impl.RestXqServlet.service(RestXqServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:168)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:78)
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:51)
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:206)
... 29 more
Caused by:
javax.servlet.ServletException: An error occurred while processing request to /exist/restxq/info: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:370)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:859)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:753)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:502)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.IllegalArgumentException: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.exquery.http.AcceptHeader.<init>(AcceptHeader.java:78)
at org.exquery.restxq.impl.RestXqServicesMap.get(RestXqServicesMap.java:170)
at org.exquery.restxq.impl.RestXqServiceRegistryImpl.findService(RestXqServiceRegistryImpl.java:99)
at org.exist.extensions.exquery.restxq.impl.RestXqServlet.service(RestXqServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:168)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:78)
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:51)
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:206)
... 29 more
Caused by:
java.lang.IllegalArgumentException: Invalid Accept Header Value: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' in respect to pattern: '((?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)(,\s?(?:(?:\*\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/\*)|(?:[a-z0-9!#\$&\.\+\-\^_]{1,127}\/[a-z0-9!#\$&\.\+\-\^_]{1,127}))(?:;\s?q=(?:0(?:\.[0-9]{1,3})?)|(?:1(?:\.[0]{1,3})?))?\s?(?:;\s?[a-z]+=[a-z]+|(?:"[a-z0-9]+"))?)*'
at org.exquery.http.AcceptHeader.<init>(AcceptHeader.java:78)
at org.exquery.restxq.impl.RestXqServicesMap.get(RestXqServicesMap.java:170)
at org.exquery.restxq.impl.RestXqServiceRegistryImpl.findService(RestXqServiceRegistryImpl.java:99)
at org.exist.extensions.exquery.restxq.impl.RestXqServlet.service(RestXqServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:867)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:168)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:78)
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:51)
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:206)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:859)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:753)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:502)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.base/java.lang.Thread.run(Thread.java:835)
Powered by Jetty:// 9.4.14.v20181114
Tested with eXist 4.6.1 and Chrome 74.0.3729.
@adamretter so this will be fixed in 4.6.2/4.7.0 and 5.0 RC....?
@dizzzz Yup.
Most helpful comment
Already fixed ;-)
See https://github.com/eXist-db/exist/pull/2673 and https://github.com/exquery/exquery/commit/9e2ee0b8e3de45a034bccdc056f6b62a6ae813c6