Closed Bug 62760 Opened 24 years ago Closed 21 years ago

Content-Disposition: attachment;filename behaves inconsistently

Categories

(Core Graveyard :: File Handling, defect)

defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.7alpha

People

(Reporter: jsp, Assigned: Biesinger)

References

Details

Attachments

(2 files)

Setting the "Content-Disposition: attachment; filename" HTTP header causes inconsistent results on the Macintosh, apparently depending on the URL of the host(!). Here's the situation: I have a program that can be built as a CGI executable, an ISAPI DLL, or an ASP-accessible COM object. Regardless of how it's built, it sets the content-disposition header the same way. It also sets Content-Type: application/octet-stream. The intent is to get the browser to offer to save the response, which is in fact an XML document representing some data that the user has indicated s/he would like to save. I've inspected the headers and the response body, and they are substantially the same regardless of which version of the program generates them. (IIS adds a Set-Cookie header and a Cache-Control header when I use the ASP version, but these should not affect the desired behavior.) What happens is that Mozilla (2000121112) behaves as desired if the response comes from the CGI version. It pops up the "Downloading" dialog, and if I opt to save to disk, bring up a "Save" dialog with the filename I specified in the "Name:" field. So far, so good. If the content comes from the ISAPI DLL, Mozilla silently saves a file on the desktop with a name like "u5pidxja.dll." The file's content is correct. If the content comes from the ASP, Mozilla pops up an "Unknown File Type" dialog instead of the "Downloading" dialog. If I choose "Save File...", the "Save" dialog appears, again with the specified filename preloaded. The problem appears to be Mac-specific. If I run Mozilla on Windows, it doesn't matter which version of the program generates the response; I always get the desired behavior. For what it's worth, IE 5 behaves as desired on Windows. On the Mac, it appears to ignore the Content-Disposition header altogether, and displays the XML. Unfortunately, I can't post a public URL that demonstrates the problem, because the application is still under development. I'd be happy to respond to email requests for a temporary address.
*** Bug 62761 has been marked as a duplicate of this bug. ***
reporter, it would help considerably if you could tell me what URL's you are entering, as well as what HTTP headers you get in response for each URL. the process of content handling depends on both the content-* headers as well as the file extension that may appear in the URL. thx. gordon: cc'ing you for mac expertise.
I can't post an URL in a public place like this, but I'll provide a temporary address in response to an email request. As for the headers, they vary slightly: --- Start CGI or ISAPI headers --- HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Web, 13 Dec 2000 15:10:44 GMT Content-Type: application/octet-stream Content-Length: 234 Content-Disposition: attachment; filename=filename.xml --- End CGI or ISAPI headers --- --- Start ASP headers --- HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Web, 13 Dec 2000 15:10:44 GMT Content-Disposition: attachment; filename=filename.xml Connection: Keep-Alive; Content-Length: 234 Content-Type: application/octet-stream Set-Cookie: ASPSESSIONIDGGQGGWQQ=JCDJOHMDBNBNGLLBAIDLKMOB; path=/.. Cache-control: private --- End ASP headers --- Of course, the date and cookie are variable. I use the usual extensions: .exe for the CGI, .dll for the ISA, and .asp for the ASP. I wondered if the URL's file extension was entering into the equation somehow, but this seemed rather astonishing. On further reflection, I can see how extensions would be useful in determining the file-type for the Mac, especially if you've got a generic content-type like octet-stream. However, the extension of a filename in the content-disposition field should probably get priority over an extension parsed from the URL, as it may provide an explicit indication of the server's intent. Note that in the best of all possible worlds, I'd specify a content-type of text/xml, but this causes Mozilla to ignore the content-disposition altogether and display the document on both Windows and the Mac. (In my opinion, it shouldn't. IE 5.x for Windows always pops up a downloading-type dialog box if Content-Disposition is set, which is the behavior I'm after.) Since NS 6 is out there with this behavior, I'm stuck with application/octet-stream for now, but I'd like to switch to text/xml down the road.
This is very interesting. I agree that it seems like the Content-Disposition is not being properly handled. As far as whether or not Content-Type should override Content-Disposition (or the other way around), I think I need to check the HTTP spec to see what if anything it has to say on the matter.
RFC 2616 (HTTP/1.1) is a bit vague on this. It says, "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." It says nothing about how other content types should be handled. However, RFC 2183 ("The Content-Disposition Header Field") says, "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." RFC 2183 "provides a mechanism whereby messages conforming to the MIME specifications [RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049] can convey presentational information." I think HTTP messages conform to the MIME specifications, so this RFC can legitimately be applied. That said, I think "there is no controlling legal authority" regarding the appropriate behavior, just hints. From my perspective, though, it's very desirable for content-disposition to get top priority. I don't think there's anything in the RFCs that prohibits that, and the hints tend to favor that behavior.
I am going to mark NEW to get this off our unconfirmed radar while you guys discuss it.
Status: UNCONFIRMED → NEW
Ever confirmed: true
nominating for moz 0.9
Target Milestone: --- → mozilla0.9
setting milestone = future (for now)
Target Milestone: mozilla0.9 → Future
One of the things that bothers me about this bug is that Mozilla appears to base its behavior on the URL. If this is because Mozilla inspects the URL to determine the media type, it violates RFC 2616: "If AND ONLY IF [my emphasis] the media type is not given by a Content-Type field, the recipient MAY attempt to guess the media type via inspection of its content and/or the name extension(s) of the URI used to identify the resource." We specify the content-type, so Mozilla is not allowed to guess.
Status: NEW → ASSIGNED
Keywords: nsbeta1
Target Milestone: Future → mozilla0.9.1
Target Milestone: mozilla0.9.1 → mozilla1.0
-> mscott (mr. content-disposition)
Assignee: darin → mscott
Status: ASSIGNED → NEW
Blocks: 104166
For what it's worth, this now behaves badly with Windows builds, too. Only downloads from a CGI executable (.exe extension) behave as desired, causing a File Save dialog to pop up primed with the appropriate file name. Downloads from an ASP (.asp extension) result in a dialog with a caption like "Downloading frammitz.asp" that indicates that I'm trying to download a file of type '"ASP auto file" [text/html]' and offers to let me open the file with asp_auto_file or save it to disk. Mozilla appears to be using the content-type of the current page rather than that of the response. (Not that this should matter, given a content-disposition indicating that the file is an attachment.) If I elect to override the default action (Open) and save the file instead, the File Save dialog pops up appropriately primed. Similar behavior occurs with ISAs (.dll extension). Again, while I have my druthers about how Mozilla handles attachments, I think it's very bad for this behavior to be dependent on the URL of the page from which the download is initiated. At the very least, it should be consistent.
This bug might tightly connected to bug 98360
The discussion at bug 98360 motivated me to try this out on M0.9.7 on MacOS 9.2. I can no longer reproduce the original problem; all three variants (CGI, ISAPI, ASP) produce the same behavior. However, the behavior differs slightly from the behavior of the Windows version. On Windows, the common file save dialog comes up. On the Mac, I get the "Downloading [whatever]" dialog, and once I choose to save the file rather than opening it, I get a save dialog. I think either behavior is defensible. The Mac's gives the user more control at the expense of additional clicks. If my argument in bug 98360#c16 is valid, the Mac's approach is better. I don't have a strong preference; even the somewhat differing behaviors doesn't really bother me.
Shucks. I was hoping the comment number (16) would be part of the bug number link.
Do the behaviors still differ if you open Edit > Preferences > Navigator > Helper Applications and click the "Reset" button on the bottom right of the panel?
I misstated the current status in comment 13. The behavior on Windows remains inconsistent, as described in comment 11. MacOS 9 and OS X behave consistently (if less than ideally, from my point of view), always bringing up the Downloading dialog with "Save this file to disk" selected. Resetting the Help Applications preference makes no difference on any platform.
Ok... On windows, could you please set the environment variable NSPR_LOG_MODULES to "nsHttp:5", set the environment variable NSPR_LOG_FILE to some filename, start up Mozilla, load one of the pages in question, quit, change the NSPR_LOG_FILE name, repeat with the other page. Then attach both files to this bug?
Target Milestone: mozilla1.0 → mozilla1.2
A little bit of new(?) data point..... When C-T is set to 'application/octet-stream' and the cgi program to produce the output ends with '.pl', Mozilla(Win2k) suggests 'cginame.pl.exe' as the filename to use in 'file save dialog box'. If C-T header is set to 'application/x-jshin' (to make sure it's NOT known to mozilla), Mozilla(win2k) lets user choose among 'open, save, cancel' and suggests 'cginame.pl' when I choose 'save'. There's another problem with handling of 'filename' parameter. It seems like Mozilla isn't compliant to RFC 2231(2184) when parsing C-D http header (see http://lxr.mozilla.org/seamonkey/source/xpfe/components/xfer/src/nsStreamTransfer.cpp#108) although it's compliant to RFC 2231 in parsing mail/news header. I'll file a separate bug for this. Of course, until this bug is fixed, fixing a bug I'm gonna file has absolutely no effect.
Blocks: 155949
That .exe thing is bug 120327. Nothing to do with this bug. Can people actually reproduce _this_ bug? Note that doing so requires Mozilla on Mac, three different server-side solutions, etc.
I can still reproduce this bug on Windows 2000, as described in previous comments. The behavior on the Mac is consistent and defensible. Perhaps it's worth summarizing what happens. On Mac OS X, the behavior is consistent, regardless of URL extension. The "Downloading [whatever]" dialog is displayed with "Save this file to disk" checked. When I click "OK," a dialog titled "Enter name of file to save to..." appears with the name specified in the Content-disposition header in the "Save as:" box. While this is slightly less than ideal for my application (it requires an extra click on the Downloading dialog), I think it's better than skipping the Downloading dialog, because that would diminish the user's control. On Windows 2000, the behavior depends on the URL extension, and it's never as good as it is on the Mac. If the extension is ".asp" or ".dll," a "Downloading" dialog comes up, but the default option is "Open using..." rather than "Save this file to disk." If the extension is ".exe," the Downloading dialog is skipped, and the "Enter name of file to save to..." dialog comes up. Bottom line: the bug has morphed a bit. Mac OS X now behaves consistently, but Window behaves inconsistently. I think the Mac's behavior is appropriate and should be implemented for Windows.
This attachment is a belated response to comment #17. It's a zip file (since Bugzilla won't accpet non-patch files larger than 150K) with four logs in it: - cgi1.log reflects a request for a page from which I can issue a request to a CGI script (.exe) that will generate a response that demonstrates this bug's problem. It's included in case it will help discern the relevant lines in the next log, since the only way I can issue a request that will generate a problematic response is by first loading a page. - cgi2.log includes data about the same initial request and response as cgi1.log, as well as data about a request for the problematic response and the response itself. - dll1.log corresponds to cgi1.log. The requests are directed to an ISAPI DLL (.dll) instead of a CGI script. - dll2.log likewise corresponds to cgi2.log.
The windows behavior is due to a security check (if the file looks like an executable, we do not allow opening it directly but force a "save" instead). What's the default helper listed for .dll and .asp files in your case? This is definitely related to bug 98360 but is not necessarily going to be completely fixed by that bug... Though I'll try to make it so that it is.
On my Win2K system, the default helper for .asp is "asp_auto_file." For .dll, it's "dllfile."
No longer blocks: 155949
Not sure if it's the same problem or not, but see Bug 163755
Content-Disposition: attachment -> File handling, per bz.
Assignee: mscott → law
Component: Networking: HTTP → File Handling
QA Contact: tever → cpetersen0953
This bug is targeted at a Mac classic platform/OS, which is no longer supported by mozilla.org. Please re-target it to another platform/OS if this bug applies there as well or resolve this bug. I will resolve this bug as WONTFIX in four weeks if no action has been taken. To filter this and similar messages out, please filter for "mac_cla_reorg".
OS: Mac System 9.x → All
Hardware: Macintosh → All
Is this an issue with a current (1.6a trunk) build?
I tested this with 1.5rc2 and 20031014 trunk builds on Windows and MacOS X. Here's what I found: - 1.5rc2 on Windows and OS X and 20031014 on OS X: the downloading dialog (now titled "Opening <filename>" on both OSes) always opens (regardless of whether the extension on the URL is .asp, .dll, or .exe), with "Save it to disk" the default option. - 20031014 on Windows: the downloading dialog always opens, with "Open it with the default application (xmlfile)" the default option. For my purposes, the new (20031014) behavior ("Open it") is less useful than the old ("Save it"). In fact, the 1.5rc2 behavior looks fine to me. I'd more or less forgotten about the issue, which may mean that it's been working the way I'd like for some time.
FWIW, some quick testing indicates that this has been working the way I prefer since 1.3. 1.2.1 almost got it "right", but it skipped the downloading dialog and went straight to a save dialog if the extension was .exe.
Sounds like this is no longer inconsistent, in any case. So this bug is worksforme.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → WORKSFORME
I didn't mean to give that impression. It works consistently from 1.3 through 1.5rc2, but the behavior of 20031014 for Windows is different from the previous behavior (which 20031014 for OS X matches). I prefer the old, consistent behavior, so I don't think this is resolved.
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
jsp: I do not understand what exactly the problem is and what the inconsistency is - could you give details on what you think is wrong with the current nightlies in that respect?
See comment #28. The difference is that 20031014 for Windows has "Open it with the default application (xmlfile)" as the default option, rather than "Save it to disk", which is the default for older versions and 20031014 for OS X. In my mind, there are reasons this is problematic: 1) The browser behaves differently on different platforms, for no obvious reason. 2) I think the old behavior was preferable. If someone else has made a case for changing the behavior, I haven't heard it. If no such case was made, the old behavior was presumably adequate, which the new one may or may not be. In this case, it seems safest to keep things as they were. If a convincing case has been made for the change, presumably it should be implemented on all platforms. This is definitely a fit-and-finish issue; users can get the job done with either behavior, since it's just a question of which radio button is checked by default. I find it amusing, though, that on my machine, recent Mozilla builds will by default fire up IE to process an XML attachment.
> 1) The browser behaves differently on different platforms, for no obvious > reason. The "obvious reason" is that one platform has an application registered to handle the type, and the other platform does not. But we did use to always check the "save" checkbox before bug 193698 landed. I assume the change biesi made there was purposeful (and that I asked him offline about it at the time, but I can't recall the conversation).
On both my Mac and my Wintel box, another program is registered with the operating system (but not Mozilla, according to the Helper Applications pref dialog) to handle XML files. I still don't see any obvious reason why Mozilla should behave differently on the two platforms. Is there someplace else I should look? I hope biesi will explain why "save" is no longer checked unconditionally. If it is indeed purposeful, shouldn't Mozilla behave similarly on my Mac and Wintel boxes, given their similar configurations?
on Mac, what is the program really registered to handle (in Internet Config)? "XML files" is not a well-defined concept on mac... (on Windows it means ".xml extension").
I'm not a Mac expert, so please bear with me. If I use Mozilla to save a downloaded XML file to disk, it gets associated with ("opened with") Safari. I determined this by opening the Info window for the downloaded file. I can't find any other indication of file-type associations. I looked in the the "Internet" settings in System Preferences. Is that what you meant by "Internet Config?"
>I assume the change biesi made there was purposeful (and that I asked him offline >about it at the time, but I can't recall the conversation). Ah. right. I think the idea was that the helper app dialog should know what the real state of the nsIMIMEInfo is. I think I talked with you about that too, but I'm not sure... I can't remember if I intended an actual frontend change. I seem to recall that I wanted to add code to nsHelperAppDlg.js to still default to "Save" - looks like I didn't do that. doing so would be fine with me, certainly - as long as it is done in nsHelperAppDlg, not in exthandler; this seems to me like a decision that the frontend should do, not the backend. (sorry that I didn't see that indirect question to me earlier, I didn't have much time to read my bugmail lately)
Yeah, I think we should make that UI change in nsHelperAppDlg. I agree that that's a UI issue, not a back end one.
maybe I should add that I will not have the time to make such a patch myself in the near future (while I'm causing bugmail anyway, -> default owner)
Assignee: law → file.handling
Status: REOPENED → NEW
Keywords: mozilla1.0helpwanted
Priority: P3 → --
Target Milestone: mozilla1.2alpha → ---
taking, have a patch
Assignee: file-handling → cbiesinger
Status: NEW → ASSIGNED
Keywords: helpwanted
Target Milestone: --- → mozilla1.7alpha
Attachment #136455 - Flags: review?(bz-vacation)
Comment on attachment 136455 [details] [diff] [review] patch Yeah, that looks good. r=bzbarsky.
Attachment #136455 - Flags: review?(bz-vacation) → review+
Attachment #136455 - Flags: superreview?(darin)
Comment on attachment 136455 [details] [diff] [review] patch rs=darin
Attachment #136455 - Flags: superreview?(darin) → superreview+
thanks, checked in Checking in nsHelperAppDlg.js; /cvsroot/mozilla/embedding/components/ui/helperAppDlg/nsHelperAppDlg.js,v <-- nsHelperAppDlg.js new revision: 1.55; previous revision: 1.54 done
Status: ASSIGNED → RESOLVED
Closed: 21 years ago21 years ago
Resolution: --- → FIXED
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: