Closed
Bug 98360
Opened 23 years ago
Closed 22 years ago
[FIX]content-disposition: attachment is ignored if known content-type specified
Categories
(Core Graveyard :: File Handling, defect, P1)
Core Graveyard
File Handling
Tracking
(Not tracked)
RESOLVED
FIXED
mozilla1.2alpha
People
(Reporter: casper, Assigned: bzbarsky)
References
(Depends on 1 open bug, Blocks 1 open bug, )
Details
Attachments
(2 files, 1 obsolete file)
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
rpotts
:
review+
darin.moz
:
superreview+
|
Details | Diff | Splinter Review |
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.3) Gecko/20010801
BuildID: 2001080110
If multipart/mixed data with an item specified to be downloaded is sent
with a known mime type, Mozilla will display the item instead of saving.
If Content-Type is set to application/octet, it will prompt to save a file of
unknown type. It also ignores the suggested file name, but I think there is a
bug written for that.
Reproducible: Always
Steps to Reproduce:
1. Send stream to browser.
2.
3.
Actual Results: Text was displayed in browser window.
Expected Results: Prompted to save a text file called test.txt
Sample:
Content-Type: multipart/mixed;boundary=Vhg5N7Gbj70Lgs6
--Vhg5N7Gbj70Lgs6
Content-Type: text/plain
Assembling document. This may take a minute.
--Vhg5N7Gbj70Lgs6
Content-Type: text/html
The document has been Assembled. If the download does not begin automatically
click <A HREF=\test.txt>here</A>
--Vhg5N7Gbj70Lgs6
Content-Type: text/plain
Content-Disposition: attachment; filename=test.txt
A file containing text with which to test downloading.
--Vhg5N7Gbj70Lgs6--
Comment 1•23 years ago
|
||
Moving to Networking: HTTP. Maybe related to bug 62760?
Component: Networking → Networking: HTTP
QA Contact: benc → tever
Reporter | ||
Updated•23 years ago
|
Reporter | ||
Updated•23 years ago
|
Reporter | ||
Comment 2•23 years ago
|
||
NS 4.77 will also display image/jpeg instead of presenting a download dialog.
Comment 4•23 years ago
|
||
should content-disposition really imply saving the file instead of viewing it?
that doesn't seem right to me... i'm leaning toward marking this bug INVALID.
Comment 5•23 years ago
|
||
rfc2616 says:
" The Content-Disposition response-header field has been proposed as a
means for the origin server to suggest a default filename if the user
requests that the content is saved to a file. This usage is derived
from the definition of Content-Disposition in RFC 1806 [35].
...
If this header is used in a response with the application/octet-
stream content-type, the implied suggestion is that the user agent
should not display the response, but directly enter a `save response
as...' dialog.
"
I agree that this is invalid, and that bug 62760 covers the last paragraph.
Comment 6•23 years ago
|
||
marking INVALID
Status: UNCONFIRMED → RESOLVED
Closed: 23 years ago
Resolution: --- → INVALID
Reporter | ||
Comment 7•23 years ago
|
||
Reopening. This header was designed to require action from the user.
I don't specify application/octet as I want the browser to present the user
with options other than just save, if available. For example, setting
content-type to image/tiff should cause a browser to offer to open a tiff
viewer if one is registered, or to save.
Regardless, RFC-2183 states that the attachment type requires explicit user
intervention before any action (such as display) is taken.
http://www.faqs.org/rfcs/rfc1806.html
2.2 The Attachment Disposition Type
Bodyparts can be designated `attachment' to indicate that they are
separate from the main body of the mail message, and that their
display should not be automatic, but contingent upon some further
action of the user.
3. Examples
The following body part contains a JPEG image that should be
displayed to the user ONLY IF THE USER REQUESTS IT. If the JPEG is
written to a file, the file should be named "genome.jpg":
Content-Type: image/jpeg
Content-Disposition: attachment; filename=genome.jpeg
Content-Description: a complete map of the human genome
http://www.faqs.org/rfcs/rfc2183.html
2.9 Content-Disposition and Multipart
If the `attachment' disposition is used, presentation of the
multipart should not proceed without explicit user action. Once the
user has chosen to display the multipart, the individual subpart
dispositions should be consulted to determine how to present the
subparts.
4. Summary
Content-Disposition takes one of two values, `inline' and
`attachment'. `Inline' indicates that the entity should be
immediately displayed to the user, whereas `attachment' means that
the user should take additional action to view the entity.
...and so on ad nauseum.
Status: RESOLVED → UNCONFIRMED
Resolution: INVALID → ---
Comment 8•23 years ago
|
||
Both those rfcs are to do with mail messages, and attachments within those
messages. I agree that what you are suggesting probably makes sense for mail,
and if we do not follow those rfcs then bugs should be filed in teh mailnews
component.
"For example, setting
content-type to image/tiff should cause a browser to offer to open a tiff
viewer if one is registered, or to save."
We do that currently, and we if you choose to save then we use the content
disposition header as the default filename (well, we did last time I looked -
see bug 87888. You mention that this isn't working, though. You may want to try
a more recent version)
Do other browsers behave as you suggest they should?
Reporter | ||
Comment 9•23 years ago
|
||
Well, the Evil Empire (TM) gets it right:
http://support.microsoft.com/support/kb/articles/Q260/5/19.ASP
and they even reference RFC-1806 (which is superceded by 2183).
Do a Google search on Content-Disposition:
http://www.google.com/search?q=content-disposition&sourceid=mozilla-search
There are some archived mail-lists with good discussions on this topic.
From a post by Jim Gettys:
"Content-Dispostion was implemented in Web browsers BEFORE it was added
to the HTTP/1.1 spec, to document existing practice. It is indeed
quite useful, when people are downloading code, to be able to provide
a file name for "save as" to work."
The applicable section is:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1
Given that it's been in since Netscape 2.0 (but never working quite right)
I'd think it would be good idea to fix it.
My comment about TIFF was just an example. The reason it happens to work is that
Mozilla doesn't handle TIFF natively. And if this were fixed, bug 62760
would automagically be fixed, as the only valid choice for application/octet
is to save as nothing else can handle it.
Comment 10•23 years ago
|
||
The important quote from the http rfc is: "if the user requests that the content
is saved to a file", and we do this.
However, if ie does it, then I guess we should consider this, so I'll confirm this.
Also see http://www.ics.uci.edu/pub/ietf/http/hypermail/1997q3/0452.html on
interaction with content encodings
darin? mscott?
Status: UNCONFIRMED → NEW
Ever confirmed: true
Reporter | ||
Comment 11•23 years ago
|
||
"...and we do this."
Nope, that's what this bug report is about. If the mime type is handled
natively (plain/text, image/jpeg, etc) then the item is displayed inline
without any user prompting. The example given at the beginning of the bug
uses text, in the actual code the problem file is JPEG.
IE tries to do this correctly, but they break it in every other release.
They do patch it eventually, though. And don't get me started on their mime
type sniffer.
Comment 12•23 years ago
|
||
I meant that we do this "if the user requests that the content is saved to a
file", as the http rfc says. (Actually, I don't know if we do if the user does
file->save as)
Reporter | ||
Comment 13•23 years ago
|
||
OK, I misunderstood. This addresses the filename portion of
content-disposition, but makes no distinction between inline and attachment.
IE currently puts up the dialog:
You have chosen to download a file from this location.
(some URL here)
What would you like to do with this file?
x Open this file from its current location
x Save this file to disk
The downside is that if you choose to open it, rather than display it inline
IE launches MS Paint (I'm testing with JPEGs).
Comment 14•23 years ago
|
||
not sure if we want to make this change, but i'll defer that decision until
later --> future
Target Milestone: --- → Future
Comment 15•23 years ago
|
||
This bug maight be tightly connected to bug 62760
Comment 16•23 years ago
|
||
I'm not certain that this is identical to bug 62760, but it is at least very
similar, though the messages in 62760 are not multipart. A good fix for one
might well fix the other.
The ability to have content-disposition: attachment consistently respected as
meaning "give the user the option to save this" takes some power from the
browser and gives it to the server and the user, making it possible to do things
like saving XML documents to the local disk for later uploading and/or email
transmission. If the server wants the browser to display the document (assuming
the browser is capable), it can omit the content-disposition header. If the
browser ignores the content-disposition header and displays the content any time
it is capable of doing so, it restricts the server's choices. I think Mozilla
will serve the Web best if it allows other parties on the Web (like servers)
maximum flexibility.
Comment 17•23 years ago
|
||
mscott: what is your feeling on this?
Comment 18•23 years ago
|
||
Bug 62760, as originally written, appears to be fixed. The Mac doesn't behave
quite the same as Windows, but it no longer behaves differently based on the URL.
The question of what effect, if any, content-disposition: attachment should have
is also raised in that bug, but this bug addresses the issue more directly. I
obviously agree with the reporter's thoughts on the subject.
I'd also like to differ with the idea that "those rfcs [1806, 2183] are to do
with mail messages". These RFCs deal with "Internet messages," specifically
"messages conforming to the MIME specifications," which is not necessarily
limited (despite the name) to "Internet mail messages." HTTP messages are not
necessarily MIME-conformant, but RFC2616 does say that "Messages are passed in a
format similar to that used by Internet mail [9] as defined by the Multipurpose
Internet Mail Extensions (MIME)," which makes it clear that the authors were
building on and borrowing from MIME. So, while there's nothing that compels
compliance with RFCs 1806 and 2183, there's nothing that forbids it, there's
sufficient common ancestry to suggest that similar behaviors are desirable.
I think the basic question hinges on 19.5.1 of RFC2616. As already noted, this
says, "If [the content-disposition: attachment] header is used in a response
with the application/octet-stream content-type, the implied suggestion is that
the user agent should not display the response, but directly enter a `save
response as...' dialog." It says nothing about handling of other content-types,
either to allow or forbid similar handling. Given the usefulness of this
approach, current practice, and the fact that this is not forbidden, it seems
desirable and reasonable to follow the same practice regardless of content-type.
This assumes, or course, that there are no clear security hazards.
Assignee | ||
Comment 19•23 years ago
|
||
I was going to file this bug, based on a modified version of Rick's testcase...
:) Good thing I found this.
This is _completely_ unrelated to bug 62760. This bug is peculiar to multipart
streams.
Let me clarify the problem in this bug. Say I send a multipart stream to
mozilla with three parts in it:
1) Part 1 is text/plain and says "The data is being prepared".
2) Part 2 is a text/html file that contains the data the user wants. It has
"Content-Disposition: attachment"
3) Part 3 is text/plain and says "The data has been sent"
Currently mozilla will not let the user view or access part 2 of the stream in a
meaningful way -- it will be replaced with part 3. Try the url I'm setting in
the url field (old URL is "http://minutes.co.palm-beach.fl.us/minutes/ - email
for access"). See whether you can get the image.
Now that parts of multipart streams expose content-disposition, it should be
simple to make the uriloader skip over internal viewers and just use the
exthandler....
So my suggestion is:
If the stream is an nsIMultipartStream _and_ it has a content-disposition header
_and_ the content-disposition is "attachment" _then_
nsDocumentOpenInfo::DispatchContent should do something special (not use
internal viewers and the like).
Darin? Scott? Bradley? Does this seem reasonable?
Comment 20•23 years ago
|
||
sounds right to me, but how is non-multipart data handled? does
content-disposition: attachment= override content-type even if there is an
associated viewer?
(btw: you meant nsIMultipartChannel, right?)
Assignee | ||
Comment 21•23 years ago
|
||
For non-multipart data I say we just show the data. In those cases the user can
choose to save the data via normal means ("Save" item in menu) if she so chooses.
And yes, I did mean nsIMultipartChannel. :)
Comment 22•23 years ago
|
||
fine by me, but doesn't IE honor the content-disposition: attachment over
content-type's that it can display? doesn't it do this to provide websites with
a programmatic way to cause a link click to result in file->SaveAs for the user?
is this something we don't want to support?
Assignee | ||
Comment 23•23 years ago
|
||
IE does honor the header (5.0 does, so I assume later ones do). NS4 does not.
I was under the impression that you were against supporting that (comment #4).
I think I'd suggest always supporting it, but the case for multipart streams is
a lot stronger than for top-level documents.
Also note that "honoring" the header could still mean opening it in a helper
without the user's intervention in my proposed implementation.... The user could
save it to a permanent location thence.
Comment 24•23 years ago
|
||
bz: that was pre- comment #7 and friends ;-)
Assignee | ||
Comment 25•23 years ago
|
||
OK. So does the just send it over to the ExternalHelperAppService solution make
sense in general then? If people are fine with it I'll take a shot at it.
To summarize: If the data has "Content-Disposition: attachment", do not use any
internal viewers and pass the data on to the ExternalHelperAppService. There
the data will get either opened in a helper application (possibly with a prompt)
or saved to disk as would normally happen for data of that type.
If this sounds wrong to you, let me know.... otherwise, I'll try to implement
something like this come next weekend.
Comment 26•23 years ago
|
||
bz: sounds good to me.
cc'ing rpotts so he can weigh in on this too.
Assignee: darin → bzbarsky
Comment 27•23 years ago
|
||
this sounds good to me to...
-- rick
Assignee | ||
Comment 28•23 years ago
|
||
This is not going to make 0.9.9. Targeting at 1.0 and hoping the drivers will
take this...
Status: NEW → ASSIGNED
OS: Windows NT → All
Priority: -- → P2
Hardware: PC → All
Target Milestone: Future → mozilla1.0
Assignee | ||
Comment 29•23 years ago
|
||
No time to work on this for 1.0. Adding helpwanted keyword. If you want to
work on this, please let me know and I can give some pointers...
Keywords: helpwanted
Target Milestone: mozilla1.0 → mozilla1.1
Assignee | ||
Comment 30•23 years ago
|
||
*** Bug 141627 has been marked as a duplicate of this bug. ***
Comment 31•23 years ago
|
||
This seems a duplicate of http://bugzilla.mozilla.org/show_bug.cgi?id=65827
Content-type's extension gets appended to content-disposition filename.
Assignee | ||
Comment 32•23 years ago
|
||
No, this is about the Content-Disposition header being completely ignored (bug
65827 is just about the filename part).
Assignee | ||
Comment 33•23 years ago
|
||
*** Bug 145024 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 34•22 years ago
|
||
1.1alpha is frozen. Unsetting milestone and will retriage in a few days when I
can make a realistic assessment of the situation.
Target Milestone: mozilla1.1alpha → ---
Comment 35•22 years ago
|
||
*** Bug 152595 has been marked as a duplicate of this bug. ***
Reporter | ||
Comment 36•22 years ago
|
||
From reports 1.1 is being frozen RSN. Any chance of this making it?
Assignee | ||
Comment 37•22 years ago
|
||
None.
I _am_ aiming for 1.2alpha, hopefully....
Assignee | ||
Comment 38•22 years ago
|
||
This is not perfect, but it's as good as I can do at the moment without some
major changes to the MIME service. The goals I had in mind were:
1) Give the user a choice of save or launch in app
2) Set "save" as the default choice
This patch does these. The one thing it does not do is to properly retrieve
the helper app for a type that we handle internally (eg image/gif). This is a
fairly small issue, imo, since most of the time this situation is encountered
the user will want to save anyway.
Assignee | ||
Comment 39•22 years ago
|
||
Attachment #97298 -
Attachment is obsolete: true
Assignee | ||
Comment 40•22 years ago
|
||
Assignee | ||
Comment 41•22 years ago
|
||
Oh, that patch lays the foundation for fixing bug 58554 too.
Some URLs to test on:
http://www.zbarsky.org:8000/cgi-bin/testMultipartData.pl
http://www.zbarsky.org:8000/cgi-bin/testMultipartData2.pl
http://www.zbarsky.org:8000/cgi-bin/testContentDisp.pl
http://www.zbarsky.org:8000/cgi-bin/testContentDisp2.pl
reviews?
Blocks: 58554
Keywords: helpwanted → review
Priority: P2 → P1
Summary: content-disposition: attachment is ignored if known content-type specified → [FIX]content-disposition: attachment is ignored if known content-type specified
Target Milestone: --- → mozilla1.2alpha
Comment 42•22 years ago
|
||
Comment on attachment 97300 [details] [diff] [review]
same patch as diff -uw (for reviewers)
sr=darin
Attachment #97300 -
Flags: superreview+
Comment 43•22 years ago
|
||
Comment on attachment 97300 [details] [diff] [review]
same patch as diff -uw (for reviewers)
r=rpotts@netscape.com
Attachment #97300 -
Flags: review+
Comment 44•22 years ago
|
||
Comment on attachment 97300 [details] [diff] [review]
same patch as diff -uw (for reviewers)
r=law
The code looks fine. But what's the rationale behind this bit:
+ // If we're handling an attachment we want to default to saving but
+ // always ask just in case
+ if (mHandlingAttachment) {
+ mMimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk);
+ } else {
mMimeInfo->GetAlwaysAskBeforeHandling(&alwaysAsk);
+ }
This appears to always force the display of the helper app dialog, even if the
user has said they don't want to see it for the MIME type in question. Is that
a proper interpretation? Why do we want to do that? Maybe there's a reason,
it just isn't obvious to me.
Comment 45•22 years ago
|
||
hey bill,
i believe the reason is security -- to prevent content from being downloaded
without the user's knowledge...
I believe that it's not always obvious that content is being downloaded...
especially with multipart/mixed content.
-- rick
Reporter | ||
Comment 46•22 years ago
|
||
If I understand what you're asking, comment #7 should answer it. Basically,
RFCs state that attachments always require explicit user interaction.
Assignee | ||
Comment 47•22 years ago
|
||
Rick and Rick are both pretty much correct. ;)
When all's said and done, I would like to take the part where we set the
preferred action to "save" out as well... But that would benefit from some
preliminary changes to the mime service that would allow usefully setting up a
helper for things like image/gif.
Assignee | ||
Comment 48•22 years ago
|
||
Checked in. Everyone please get 1.2alpha once it comes out and test the heck
out of this; this is not the most robust code in the world we're touching here. ;)
Status: ASSIGNED → RESOLVED
Closed: 23 years ago → 22 years ago
Resolution: --- → FIXED
Assignee | ||
Comment 49•22 years ago
|
||
*** Bug 173339 has been marked as a duplicate of this bug. ***
Comment 50•22 years ago
|
||
-> filehanding per bz.
Component: Networking: HTTP → File Handling
QA Contact: tever → cpetersen0953
Updated•8 years ago
|
Product: Core → Core Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•