views:

94

answers:

3

I am having an issue with IEMobile accessing my site. A certain redirect I use has a 302 response code, and the headers (yep, that's app-engine):

Server         Development/1.0 Python/2.5.2
Date           Tue, 04 Nov 2008 16:47:02 GMT
Content-Type   text/html; charset=utf-8
Cache-Control  no-cache
Location       http://localhost/games/edit-game.html?game=110&frame_to_edit=3#input-top
Content-Length 0

This works fine for most browsers. Enter IEMobile (via Windows Mobile 6.1). Upon receiving this response, IEMobile heads to

http://localhost/games/edit-game.html?game=110&frame_to_edit=3

Note the missing #input-top. What can I do?

A: 

Reading RFC2616 it specifies

Location: absoluteURI

where absolute URI is defined by RFC2396

Tracing the definition of absoluteURI, the # character is not part of the URI definition, this is confirmed by section 4.1

4.1. Fragment Identifier

When a URI reference is used to perform a retrieval action on the
identified resource, the optional fragment identifier, separated from
the URI by a crosshatch ("#") character, consists of additional
reference information to be interpreted by the user agent after the retrieval action has been successfully completed. As such, it is not part of a URI, but is often used in conjunction with a URI.

In short, the #fragment is not part of the URI, and is being stripped by the browser as not part of the Location: header.

Dave Cheney
This is a bug in RFC 2616. See http://trac.tools.ietf.org/wg/httpbis/trac/ticket/6. It will be fixed in the next revision (check http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-08.html#rfc.section.9.4)
Julian Reschke
A: 

Dave is right, googling comes up with some the same issue.

Ugly workaround : use a meta refresh tag instead of redirect if you want to support that browser.

Chad Grant
A: 

There's little you can do; it appears to be a bug in your browser (the implementers apparently have missed an RFC 2616 erratum).

Julian Reschke