[[development-basepath]] === Considerations for basePath All communication from the Kibana UI to the server needs to respect the `server.basePath`. Here are the "blessed" strategies for dealing with this based on the context: [float] ==== Getting a static asset url Use webpack to import the asset into the build. This will give you a URL in JavaScript and gives webpack a chance to perform optimizations and cache-busting. ["source","shell"] ----------- // in plugin/public/main.js import uiChrome from 'ui/chrome'; import logoUrl from 'plugins/facechimp/assets/banner.png'; uiChrome.setBrand({ logo: `url(${logoUrl}) center no-repeat` }); ----------- [float] ==== API requests from the front-end Use `chrome.addBasePath()` to append the basePath to the front of the url. ["source","shell"] ----------- import chrome from 'ui/chrome'; $http.get(chrome.addBasePath('/api/plugin/things')); ----------- [float] ==== Server side Append `request.getBasePath()` to any absolute URL path. ["source","shell"] ----------- const basePath = server.config().get('server.basePath'); server.route({ path: '/redirect', handler(request, h) { return h.redirect(`${request.getBasePath()}/otherLocation`); } }); ----------- [float] ==== BasePathProxy in dev mode The Kibana dev server automatically runs behind a proxy with a random `server.basePath`. This way developers will be constantly verifying that their code works with basePath, while they write it. To accomplish this the `serve` task does a few things: 1. change the port for the server to the `dev.basePathProxyTarget` setting (default `5603`) 2. start a `BasePathProxy` at `server.port` - picks a random 3-letter value for `randomBasePath` - redirects from `/` to `/{randomBasePath}` - redirects from `/{any}/app/{appName}` to `/{randomBasePath}/app/{appName}` so that refreshes should work - proxies all requests starting with `/{randomBasePath}/` to the Kibana server If you're writing scripts that interact with the Kibana API, the base path proxy will likely make this difficult. To bypass the base path proxy for a single request, prefix urls with `__UNSAFE_bypassBasePath` and the request will be routed to the development Kibana server. ["source","shell"] ----------- curl "http://elastic:changeme@localhost:5601/__UNSAFE_bypassBasePath/api/status" ----------- This proxy can sometimes have unintended side effects in development, so when needed you can opt out by passing the `--no-base-path` flag to the `serve` task or `yarn start`. ["source","shell"] ----------- yarn start --no-base-path -----------