I have an application which records users visits. None of these visits are directly accessed, 100% of these visits are referred from another site.
I am passing
Browsers sometimes will include the referer
in the request. But it is not mandatory to do so (the referer
is 100% voluntary). Indeed there are various privacy and security issues surrounding the referer
(for example, if an HTTPS site refers you to an HTTP site, the browser should not include the referring site as the referer
). So don't rely on it.
It is common when you are stuck finding why it is missing: - Sometime your referer is https and you are on http, it will be lost.
Otherwise: - User accessing by inputing url directly. - A user has bookmarked and come from bookmarks. - Sometime user keep the url default for browser (similar like bookmark) - Proxy surfying may remove referer. - accessing website as bots (search engine)
When linking from one document to another in Internet Explorer 4.0 and later, the Referer header will not be sent when the link is from an HTTPS page to a non-HTTPS page. The Referer header also will not be sent when the link is from a non-HTTP(S) protocol, such as file://, to another page. for more info go to this link
If a user visits your site directly, there is no referrer. It's also possible they have set it up so their browser never sends the referrer.
According to this answer, browsers do not necessarily send a referrer when doing a meta refresh.
There are a couple of number of reasons why HTTP_REFERER
might be blank.
window.open
, window.location
and even setting target="_blank"
in anchors or meta refresh
.file_get_contents
, fopen
and other similar functions in other languages will probably not set a referer request.There are probably more situations when this could happen, I'll update if I can think of anything that seems reasonable.