- From: Michael A. Puls II <shadow2531@gmail.com>
- Date: Fri, 15 Jun 2012 02:28:52 -0400
- To: uri@w3.org
On 3/1/2012 12:48 PM, Alessandro Angeli wrote:
> However, as far as I can tell, it is possible to achieve an even more
> generic and flexible result than what would be accomplished by the
> HEADERS param in a completely standard-compliant way by using the
> message/* MEDIATYPE, so that the payload (DATA part) of the "data:" URI
> would be a complete message/*, including its header fields.
>
> For example, using message/http, one would have (all in one line):
>
> {data:message/http,HTTP 200 OK|Content-Type:text/plain;charset=utf-8
> |Content-Disposition:attachment;filename=%22hello world.txt%22||HELLO
> WORLD}
>
> I used {} to delimit the URI and I used spaces and | for readability,
> but they are supposed to be escaped as %20 and %0D%0A (that is, I used |
> to represent a new line). I also used unescaped reserved chars because
> of the consideration at the end of this message.
>
> Using message/rfc822:
>
> {data:message/rfc822,Content-Type:text/plain;charset=utf-8
> |Content-Disposition:attachment;filename=%22hello world.txt%22||HELLO
> WORLD}
Both of those sound cool. I like the latter better as there's no need to
specify http stuff. The message/rfc822 format is fine too.
"message/rfc822" for the mime type in the data URI though is not. I
might want to create a data URI for a real message/rfc822 file and I
wouldn't want that being interpreted as something that has an embedded
attachment that the browser needs to extract.
For example, Opera can already render the content of
<data:message/rfc822,Content-Type%3A%20text%2Fplain%3B%20charset%3D%22utf-8%22%3B%20name%3D%22test.txt%22%0D%0AContent-Disposition%3A%20attachment%3B%20filename%3D%22test.txt%22%0D%0AContent-Transfer-Encoding%3A%208bit%0D%0A%0D%0Atest%0D%0A>
as an email message in a browser tab.
So, the mime type needs to be something not currently used. message/http
or whatever.
> The benefits over the HEADERS param would be:
>
> 1) no need to define a new param
>
> 2) more flexible (you can even specify the HTTP response line)
I personally can't think of use for that or need that.
> 3) to implement it, I believe it should be possible to simply unescape
> the whole payload and pipe the result as an octet-stream into the
> browser's HTTP response handler (if using message/http; if using
> message/rfc822, a fake response line could be prefixed to the payload to
> turn it into a message/http)
Indeed. That sounds like that'd be the case.
> 4) base64 encoding can be specified for the whole payload or only for
> the message/* body, using the usual Content-Transfer-Encoding header
> field
Yeh, if the data URI content is base64-encoded in the URI, the
person/thing creating the attachment's content in the message/ format
might want to use a Content-Transfer-Encoding of 8bit (for example) to
save space instead of base64 so that the file data isn't base64-encoded
twice.
Might even be cool to support Content-Transfer-Encoding of "Binary" for
the format too for binary attachments. Opera can already handle that.
Load <http://shadow2531.com/opera/testcases/mht/000.mht> in Opera. See
the source of it (wget it for example) to see the binary png data for
the attachment (it breaks Opera's view source often).
> 5) it is possible to use quoted-printable, which may be more compact
> (after all, "=" does not need to be URI-escaped)
Indeed.
> 6) it is even possible to use gzip compression, which may mitigate the
> bloating caused by base64
Indeed. I think browser already supports all kinds of encodings.
One thing with the header format though. Although you could can specify
multiple attachments in the message/rfc822 (or eml-like) format (with
multipart/mixed and then each attachment section), the format for use
with data URIs should be limited to a single attachment.
--
Michael
Received on Friday, 15 June 2012 06:29:21 UTC