X_send_file sends a 1 byte file

Hello,

sorry if creating a dupe…

I’m trying to download files to authenticated users in my app. I’ve set
up x_send_file. All seems to be correct to me, however when I try to
download any file, I get a 1-byte long file downloaded.

I am getting this already in development - so no Apache, no lighthttpd,
just a mongrel_rails start in the root of my app.

Any help/hint would be appreciated.

Thanks,
George

On Mon, Jun 16, 2008 at 11:35 PM, George Schreiber
[email protected] wrote:

Any help/hint would be appreciated.

This only works with a frontend httpd to intercept the X-Sendfile
response header and send the actual file.

Without a frontend httpd, you’re seeing the expected result. Use
firebug to verify.

jeremy

On Tue, Jun 17, 2008 at 1:23 AM, Jeremy K. [email protected]
wrote:

response header and send the actual file.

Without a frontend httpd, you’re seeing the expected result. Use
firebug to verify.

To expand on what Jeremy said, x_send_file just sets an HTTP header,
X-Sendfile, in the response.

It’s up to whatever is running in front of your processes to see that
header and then to do something with it.

So, in order to adequately test it, you will have to have something
in front of your processes which handle it. Also be aware that only
some web servers implement X-Sendfile (Apache, via mod_xsendfile,
lighttpd natively [it originated with them], and Swiftiply are the
three that come to mind). Litespeed has their own redirect syntax
(which they spin to make it sound better than the others). Nginx also
has it’s own approach with x-accel-redirect (which Swiftiply may
support in the future, as well).

So if you are using any one of those mechanisms for delivering static
file downloads, to test it you will have to have a compatible front
end running, and without some (fairly minor) code changes, you are
locked into whatever one you choose to use.

Hope this helps.

Kirk H.

If you do have X-SendFile installed make sure your settings for it are
correct as well. I got caught by this the other day too. I had
forgotten to add…

|XSendFile on
XSendFileAllowAbove on

|||to my VirtualHost config.

FYI.

matte - webmaster
[email protected]
||

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

“Kirk” == Kirk H. [email protected] writes:
Kirk> So, in order to adequately test it, you will have to have
Kirk> something in front of your processes which handle it. Also
Kirk> be aware that only some web servers implement X-Sendfile

Good point.

I have some scripts that setup apache.conf to run in the current
directory, as current user, on a high-port. It would be all rake tasks,
but my rake task actually just invokes a Makefile and shell scripts,
because I wrote this code for a non-ruby project originally.
(My makefile also arranges to build a mysql cluster locally too)

I would like to have system level tests of some kind to help with
this kind of thing too. I haven’t looked at how the mongrel code itself
gets tested — maybe there is something there that can help?


Michael R. [email protected]
Director – Consumer Desktop Development, Simtone Corporation, Ottawa,
Canada
Personal: Michael Richardson's Directory

SIMtone Corporation fundamentally transforms computing into simple,
secure, and very low-cost network-provisioned services pervasively
accessible by everyone. Learn more at www.simtone.net and
www.SIMtoneVDU.com

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iQDVAwUBSFgS7e0sRu40D6vCAQI4ogYAoJkW4C7P7acV+ZRoCU6Bb46Wt3M6qwzG
0SUWXzs2xvGPFmcpdqjBIIHj/D+XCNZxIPgFtj62yFmZTzl320sJvjcrA/SOteRD
o4ik+wXHFmIKum3Yz4i2qSJFNJmZJ4Juv7p9Np1b6M0W3Gjz4IbKox1oteCicnTW
e18hgZg5009LxjPxwNXnKVZbJQmdqGM3xB2MMK3eBOkN5HkbwaBConrhOZ3VpmU1
PlTVjdt4mZ2RPXtrzDMG6ROJqhaYbmka
=Fyfj
-----END PGP SIGNATURE-----

Jeremy K. wrote:

On Mon, Jun 16, 2008 at 11:35 PM, George Schreiber
[email protected] wrote:

Any help/hint would be appreciated.

This only works with a frontend httpd to intercept the X-Sendfile
response header and send the actual file.

Without a frontend httpd, you’re seeing the expected result. Use
firebug to verify.

Thanks Jeremy;

  • as the filename is correct
  • as I have used breakpoints in x_send_file and investigated the headers
    it sets
    I think you are right, I am seeing the expected and correct results.

Also, thank you all of you guys; I will go and play with Apache (2.2) –
the chosen front-end – to see it downloading the complete file.

Best regards,
George

Managed to configure Apache+proxy balancer+XSendFile+Mongrel to work.
:slight_smile:

Thank you guys for putting me on the right track!!