I'm about to implement the following code to block some referrer spam a client has been receiving.
Is a 403 the most efficient way (I believe the header size is 0 bytes, or at least small) of redirecting the request, or are there other options I should consider?
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} spammer-one\.com [NC,OR]
RewriteCond %{HTTP_REFERER} spammer-two\.com
RewriteCond %{HTTP_REFERER} spammer-three\.com
RewriteRule .* - [F]
The source of concern is that their site is receiving a huge volume of traffic from a number of spam domains, server load could be a factor.
I my practice -- it is perfect (unless you want to fool them a bit more responding with 404 or some another code).
Header is not zero bytes long, but very small indeed (2 or 3 lines AFAIK). Zero bytes response (which means -- connection is dropped without sending any response headers) can only be sent by Apache on very low level (e.g. when validating requested URL and it finds that request is invalid, e.g. containing invalid characters etc) which is way before mod_rewrite kicks in.
Just a small note: if site is very busy (as you have said), then it is better to be placed in one of the Apache's config files instead of .htaccess, which is read on every request.