Hi Thierry,

I'm not entirely sure what the intended behaviour of the TunnelService 
(regarding user-agents) is. Could you confirm this should be as follow 
(assuming the user agent tunnel is switched on in the service)?

Step 1. The TunnelService parses the 'User-Agent' header and compares it 
to "org/restlet/data/agent.properties", therefore populating agent 
attributes in the client info class.

For example (with Safari 4):
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) 
AppleWebKit/530.18 (KHTML, like Gecko) Version/4.0.1 Safari/530.18

{agentOsShortName=Macintosh, osData= en-us, agentName=Safari, 
mozillaVersion=5.0, appleWebKitComment=KHTML, like Gecko, 
familyVersion=4.0.1, agentVersion=530.18, agentOs=Intel Mac OS X 10_5_7, 

Step 2. The service then looks into 
"org/restlet/service/accept.properties", if the 'agentName' (in a given 
block in this file) matches the 'agentName' in the agent attributes and 
if the 'acceptOld' line (in the same block) matches the original 
'Accept' header in the request, then 'Accept' is replaced with the value 
in 'acceptNew'.

In the test above, the agentName is detected properly, but it seems the 
blank line in the acceptOld config file doesn't mean it's a wildcard, so 
there should probably be the actual Accept header sent by Safari in this 
configuration file. This may be the reason why it doesn't work (it seems 
to work when that line is configured to match the Accept header sent).

Best wishes,


P.S.: Below are a few User-Agent and Accept headers I've been able to 

- Firefox 2 on XP:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv: 
Gecko/20081217 Firefox/ (.NET CLR 3.5.30729)

(I was surprised to see that this one doesn't seem to be recognised as 
'agentName=Firefox' but 'Mozilla'; here are the attributes: 
{agentName=Mozilla, osData=Windows NT 5.1; en-GB; rv: 
Gecko/20081217 Firefox/ (.NET CLR 3.5.30729, agentVersion=5.0, 

- Browser in the GWT Eclipse plugin:
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.7.12) 

- iPod Touch (FW 2.2.1, not the latest):
User-Agent: Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; 
en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 
Mobile/5H11 Safari/525.20

- MSIE 8 on XP:
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; 
Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 
3.0.4506.2152; .NET CLR 3.5.30729)

- Safari 4 on XP:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) 
AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17

- Safari 4 on OSX:
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) 
AppleWebKit/530.18 (KHTML, like Gecko) Version/4.0.1 Safari/530.18

Thierry Boileau wrote:
> Hi Bruce,
> can you send us the content of the "user-agent" header? We will complete 
> the default "agent.properties" file.
> best regards,
> Thierry Boileau
>> Hi guys,
>> I'm setting up a restlet app at the moment, and I'd like to set it up so 
>> that if a user uses a browser to access a resource, he gets given a nicely 
>> formatted HTML page, but if he separately asks for XML or JSON he gets a 
>> machine parsable response.  Its all working well on Firefox, but I'm having 
>> some issues getting it working on Safari 4.
>> It looks like the problem is the Accept: header that is being sent in by 
>> Safari.  Its 
>> application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
>> This causes the content negotiation process to favor xml as an output over 
>> html, as html has a priority of 0.9.  I tried xhtml, which has the same 
>> priority as xml, but it looks like it still chooses xml (presumably it is 
>> random which response you get if they have the same priority).
>> Is there a way I can override Safari's preferences?  I know that it is 
>> asking to have xml as the highest priority, but frankly I think that is 
>> wrong.
>> Any suggestions that you can give would be appreciated.
>> Bruce.


Reply via email to