Skip to content
Logs
Visit Logs on GitHub
Set theme to dark (⇧+D)

Pathing status

Understanding pathing

Cloudflare issues the following Edge Pathing Statuses:

  • EdgePathingSrc (pathing source): The stage that made the routing decision
  • EdgePathingOp (pathing operation): The specific action or operation taken
  • EdgePathingStatus (pathing status): Additional information complementing the EdgePathingOp

EdgePathingSrc

EdgePathingSrc refers to the system that last handled the request before an error occurred or the request was passed to the cache server. Typically, this will be the macro/reputation list. Possible pathing sources include:

  • err
  • sslv (SSL verification checker)
  • bic (browser integrity check)
  • hot (hotlink protection)
  • macro (the reputation list)
  • skip (Always Online or CDNJS resources)
  • user (user firewall rule)

For example:

$ jq -r .EdgePathingSrc logs.json | sort -n | uniq -c | sort -n | tail1 err5 user93 macro

EdgePathingOp

EdgePathingOp indicates how the request was handled. wl is a request that passed all checks and went to your origin server. Other possible values are:

  • errHost (host header mismatch, DNS errors, etc.)
  • ban (blocked by IP address, range, etc.)
  • tempOk (challenge successfully completed)
  • chl (challenge issued)

For example:

$ jq -r .EdgePathingOp logs.json | sort -n | uniq -c | sort -n | tail1 chl1 errHost97 wl

EdgePathingStatus

EdgePathingStatus is the value EdgePathingSrc returns. With a pathing source of macro, user, or err, the pathing status indicates the list where the IP address was found. nr is the most common value and it means that the request was not flagged by a security check. Some values indicate the class of user; for example, se means search engine. Others indicate whether the visitor saw an error or a captcha, such as, captchaNew or jschlOK.

For example:

$ jq -r .EdgePathingStatus logs.json | sort -n | uniq -c | sort -n | tail1 captchaNew1 dnsErr5 ip92 nr

How does pathing map to Threat Analytics?

Certain combinations of pathing have been labeled in the Cloudflare Threat Analytics feature (in the Analytics app in the Cloudflare dashboard). The mapping is as follows:

PathingLabel
bic.ban.unknownBad browser
hot.ban.unknownBlocked hotlink
hot.ban.ip
macro.ban.ipBad IP
user.ban.ctryCountry block
user.ban.ipIP block (user)
user.ban.ipr16IP range block (/16)
user.ban.ipr24IP range block (/24)
macro.chl.captchaErrCaptcha Error
macro.chl.captchaFailHuman Challenged
macro.chl.captchaNewNew CAPTCHA (CF)
macro.chl.jschlFailBrowser Challenged
macro.chl.jschlNewChallenged threat
macro.chl.jschlErrBot request
user.chl.captchaNewNew CAPTCHA (user)

Understanding response fields

The response status appears in three places in a request:

  • edgeResponse
  • cacheResponse
  • originResponse

In your logs, the edge is what first accepts a visitor's request. The cache then accepts the request and either forwards it to your origin or responds from the cache. It's possible to have a request that has only an edgeResponse or a request that has an edgeResponse and a cacheResponse, but no originResponse.

This is how you can see where a request terminates. Requests with only an edgeResponse likely hit a security check or processing error. Requests with an edgeResponse and a cacheResponse either were served from the cache or saw an error contacting your origin server. Requests that have an originResponse went all the way to your origin server and errors seen would have been served directly from there.

For example, the following query shows the status code and pathing information for all requests that terminated at the Cloudflare edge:

$ jq -r 'select(.OriginResponseStatus == null) | select(.CacheResponseStatus == null) |"\(.EdgeResponseStatus) / \(.EdgePathingSrc) / \(.EdgePathingStatus) / \(.EdgePathingOp)"' logs.json | sort -n | uniq -c | sort -n1 403 / macro / captchaNew / chl1 403 / macro / nr / wl1 409 / err / dnsErr / errHost

The information stored is broken down based on the following categories (click for details below):

Errors

These occur for requests that didn't pass any of the validation performed by the Cloudflare network. Example cases include:

  • Whenever Cloudflare is unable to look up a domain or zone
  • An attempt to improperly use the IP for an origin server
  • Domain ownership is unclear (for example, the domain is not in Cloudflare)
EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
cyclicCloudflare looperr_host403
dns_errUnable to resolveerr_host409
reserved_ipDNS points to local or disallowed IPerr_host403
reserved_ip6DNS points to local or disallowed IPv6 addresserr_host403
bad_hostBad or no Host headererr_host403
no_existing_hostOwnership lookup failed: host possibly not on Cloudflareerr_host409

User-based actions

These occur for actions triggered from users based on the configuration for a specific IP (or IP range).

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
Asnum
ip
ipr24
ipr16
ip6
ip6r64
ip6r48
ip6r32
ctry
the request was blockedbanuser403
Asnum
ip
ipr24
ipr16
ip6
ip6r64
ip6r48
ip6r32
ctry
  • the request was allowed
  • WAF will not execute
wluser

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Firewall Rules

The Cloudflare Firewall Rules app triggers actions based on matching customer-defined rules.

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
filter_based_firewallthe request was blockedban
filter_based_firewallthe request was allowedwl

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Zone Lockdown

Zone Lockdown blocks visitors to particular URIs where the visitor's IP is not allowlisted.

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
zlLock down appliedbanuser

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Firewall User-Agent Block

Challenge (Captcha or JavaScript) or block visitors who use a browser for which the User-Agent name matches a specific string

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
uaBlocked User-Agentbanuser

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Browser Integrity Check

Assert whether the source of the request is illegitimate or the request itself is malicious

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
emptyBlocked requestbanbic

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Hot Linking

Prevent hot linking from other sites

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
emptyBlocked requestbanhot

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

L7-to-L7 DDoS mitigation

Drop DDoS attacks through L7 mitigation

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
l7ddosBlocked requestbanprotect

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

IP Reputation (MACRO)

The macro stage is comprised of many different paths. They are categorized by the reputation of the visitor IP.

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
nrThere is no reputation data for the IP and no action is being taken (if IUAM is on, a JS challenge is served)wlmacro
wlIP is explicitly allowlistedwlmacro
scanIP is explicitly allowlisted and categorized as a security scannerwlmacro
monIP is explicitly allowlisted and categorized as a Monitoring Servicewlmacro
bakIP is explicitly allowlisted and categorized as a Backup Servicewlmacro
mobIP is explicitly allowlisted and categorized as Mobile Proxy Servicewlmacro
seIP is explicitly allowlisted as it belongs to a search engine crawler and no action is takenwlmacro
greyIP is greylisted (suspected to be bad) but the request was either for a favicon or security is turned off and as such, it is allowlisted.wlmacro
bad_okThe reputation score of the IP is bad (or is a TOR IP) but the request was either for a favicon or security is turned off and as such, it is allowlisted. Alternatively, the threat score of the IP is in the accepted security level.wlmacro
unknownThe pathing_status is unknown and the request is being processed as normal.wlmacro

All other paths in the MACRO stage issue a challenge. Possible scenarios include:

  • A clean IP (acceptable threat level) with IUAM on will trigger the JS challenge
  • A greylisted IP triggers the JS challenge (captcha challenge if IUAM is on)
  • An IP with a bad reputation (also TOR) with a threat level above the accepted threshold triggers a captcha challenge (JS challenge if IUAM is on)

Rate Limiting

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
rate_limitDropped requestbanuser
rate_limitIP is explicitly allowlistedsimulateuser

To understand the behavior of challenge pages, see JavaScript and Captcha Challenge.

Special cases

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
ao_crawlAO (Always Online) crawler requestwlskip
cdnjsRequest to a cdnjs resourcewlskip
certain challenge forced by Cloudflare's special headersforced

JavaScript and Captcha Challenge

EdgePathingStatusDescriptionEdgePathingOpEdgePathingSrcStatus Code
  • captchaNew
  • jschlNew
A Captcha/JavaScript challenge was presentedchl
  • 403
  • 503
  • captchaOk
  • jschlOk
A Captcha/JavaScript challenge would have been presented but a clearance cookie was presenttemp_ok
  • As per request
  • captchaSucc
  • jschlSucc
A Captcha challenge was solved correctly and a clearance cookie will be issuedtemp_okmacro
  • 302 (Redirect to original URL)
  • captchaFail
  • jschlFail
A failed attempt at solving the Captcha challenge, no clearance cookie will be issued

chl

macro
  • 302 (Redirect to original URL)
  • captchaErr
  • jschlErr
A failed attempt at solving the Captcha challenge, no clearance cookie will be issued. Not enough data was provided to solve the challenge. The difference to the previous case is that not all input was provided which is needed to verify the solution

chl

macro
  • 302 (Redirect to original URL)


  • tokRedempSucc
A blinded-token redemption was successful

chl

  • As per request
  • tokRedempFail
A blinded-token redemption failedchl
  • As per request