HTTP Plugin
The HTTP plugin (tika-pipes-http) provides a fetcher that downloads documents over HTTP(S). It is fetcher-only — pair it with another emitter and iterator.
| Interface | Component name | Class |
|---|---|---|
Fetcher |
|
|
HTTP Fetcher (http-fetcher)
Fetches document bytes from an HTTP(S) URL. The fetch key is the URL.
{
"fetchers": {
"httpf": {
"http-fetcher": {
"userName": "tika",
"password": "REDACTED",
"authScheme": "basic",
"userAgent": "tika-pipes/1.0",
"maxConnections": 2000,
"maxConnectionsPerRoute": 1000,
"connectTimeoutMillis": 30000,
"socketTimeoutMillis": 60000,
"requestTimeoutMillis": 60000,
"overallTimeoutMillis": 120000,
"maxRedirects": 5,
"maxSpoolSize": -1,
"httpHeaders": ["Accept: application/octet-stream"]
}
}
}
}
Configuration
| Field | Default | Description |
|---|---|---|
|
none |
Credentials. Applied only when |
|
none |
NT domain for NTLM auth. Same |
|
none |
|
|
none |
Outbound HTTP proxy. |
|
none |
|
|
|
HTTP connection-pool size. |
|
|
Per-route connection-pool size. |
|
|
TCP connect timeout. |
|
|
Socket read timeout. |
|
|
Connection-manager request timeout. |
|
|
Hard cap on total time for a single fetch operation. |
|
|
Maximum number of redirects to follow. |
|
|
Verify server certificates and hostnames. Set |
|
|
Maximum bytes to spool locally before failing. |
|
|
Maximum bytes of error response body to capture into the exception. |
|
empty |
Extra HTTP headers, formatted as |
|
empty |
Structured per-request headers as a |
|
none |
JWT claims, for endpoints that accept JWT-bearer auth. |
|
none |
HMAC secret for symmetric-key JWT signing. |
|
none |
Base64-encoded private key for asymmetric (RSA/ECDSA) JWT signing. Mutually exclusive with |
Security Notes
This fetcher makes the server issue HTTP requests to a URL supplied as the fetch key.
That is a server-side request forgery primitive by design, and it is not constrained by
this plugin. Treat the source of fetch keys as fully trusted, and restrict access to any
endpoint that can reach it (/pipes, /async).
-
The fetch key is used as the URL with no validation. It is passed straight to
new HttpGet(fetchKey). There is no scheme allowlist, no host denylist, and no check against loopback, link-local, or RFC1918 addresses. A fetch key ofhttp://169.254.169.254/…;reaches a cloud metadata endpoint like any other URL. The resolved address is recorded in metadata after the fetch, not consulted before it. Schemes other thanhttp/httpsfail only because no other scheme is registered in the connection manager — that is a side effect of the transport setup, not a check. -
TLS certificates are verified by default (
verifySsl: true). Not every HTTP-based plugin does this — check the plugin page before assuming.To opt out — self-signed internal certificates are the usual reason — set
verifySsltofalseon the fetcher:{ "fetchers": { "my-http-fetcher": { "http-fetcher": { "verifySsl": false } } } }That installs an accept-everything trust strategy and
NoopHostnameVerifier: any certificate from any host is accepted, so anything on the network path can read and alter what is fetched. Prefer adding your CA to the JVM truststore over turning this off. -
There is no redirect host allowlist. Redirects are followed up to
maxRedirectsregardless of the target host — a redirect can send the fetch to any host the server can reach, including loopback, link-local, or RFC1918 addresses. SetmaxRedirectsto0(the default) to follow no redirects at all.
Notes
-
Both basic auth and JWT auth may be configured at the same time, but only one will apply per request (JWT takes precedence when present).
-
For zero-redirect crawling, leave
maxRedirectsat0. The fetcher returns the redirect response as-is so the caller can decide what to do. -
overallTimeoutMillisis enforced by the fetcher itself, not the HTTP client — it covers slow drains and zombie connections that the lower-level timeouts may miss. -
For Atlassian Cloud endpoints that require an Atlassian Connect JWT, use the dedicated Atlassian JWT fetcher instead — it has the correct claim layout baked in.