I have a feed on my website which Vienna is failing on with a HTTP 403 - even though when I "Show XML Source" it's there and looks fine. I can access the feed directly in a browser and I can validate it fine, but Vienna (Version 3.0.0 Beta 19 :40267c3:) doesn't want to read it. Any suggestions on how to track down the problem?
My site is a Wordpress site.
I did not update or change anything on it recently.
I noticed the problem after updating to Vienna Version 3.0.0 Beta 19.
I just checked on another machine and Beta 18 reads it fine.
I have the same problem accessing http://www.londonreconnections.com/feed/ which is also a wordpress site. I have downgraded back to beta 18 which can still access it.
The cause is some complex processing of the User-Agent field by a Wordpress plugin called Bad Behaviour which Wordpress.com use.
The change to "Mozilla/5.0 Vienna/Master Safari/537.71" in our Vienna user-agent between Beta 18 and Beta 19 -- which was required to ensure Google's servers would correctly produce gzip encoded content -- is tripping one of Bad Behaviour's string or regex blocks.
So it's some combination of characters in the new user-agent which the Bad Behaviour plugin matches is causing this.
Fundamentally, Bad Behaviour is filtering based on incorrect assumptions made about the HTTP standards.
I've tried reporting this in the Bad Behaviour bug tracker system with no luck so far, and will be looking to their developer to fix it in an upcoming release.
In the mean time we should inform Vienna users that they have subscribed to a server which uses the Bad Behaviour plugin, and request the host contacts the developer of Bad Behaviour to have its code fixed.
Technical details
Bad Behaviour plugin requires the use of an Accept HTTP header when certain strings are contained in the User-Agent, whereas the RFC 2616 clearly states Accept header is optional.
The "Accept" header field can be used by user agents to specify
response media types that are acceptable. Accept header fields can
be used to indicate that the request is specifically limited to a
small set of desired types, as in the case of a request for an in-
line image.