Re: Can output filter return page not found?
Thanks, good hint. I was thinking that myself overnight. Here's the basic scenario: I use the main request handler to generate XML. I have a framework that allows me to glue together various sub-handlers (from my framework, not Apache handlers) to add disparate data elements into the XML depending on the context of the page. Then I use an output filter to process the XML using XSLT. This completely separates data from presentation. Works really well except for my current issue. Seems like a reasonable use of the Apache 2.x handler structure. So I don't actually know whether the template exists until the output filter. I don't want to pollute my data generation phase with checking ahead for the template. I'm also not sure why Apache isn't detecting that the template doesn't exist ... it should look like any other servable resource. So before I start messing with headers I think I'll look at the way my configuration file is set up. Perhaps I'm doing something stupid there. I'm using Location instead of FilesMatch (or whatever) to configure the output filter ... maybe it's something like that. Thanks again! Adam Prime wrote: If you're using the bucket brigade API you'd have to intercept the headers and modify them there. You might have an easier time doing something like this using the stream API, but i don't really know, just taking a shot in the dark. I'd think that it's certainly possible though, somehow. That said you might be better served catching whatever situation is causing you to want to do this earlier in the request cycle and keeping the response phase from doing whatever it wants to do in the first place and just causing the 404 to happen then. Adam Marc M. Adkins wrote: Hmmm...it's a bucket brigade FilterRequestHandler output filter. It seems to not care what return code I use, whatever is in the bucket brigade goes out. Can I not return Apache2::Const::NOT_FOUND from handler()? That seems odd. Marc M. Adkins wrote: I'm trying to cause a 404 error from an output filter and it isn't doing what I expect. Is this even possible? mma
Re: Can output filter return page not found?
Sounds like something I would *not* do. If you are going to return a 404, why not do it as soon as possible. Generating data only to return a 404 sounds like useless extra work unless you are caching the same data for future requests. On 12/17/07, Marc M. Adkins [EMAIL PROTECTED] wrote: Thanks, good hint. I was thinking that myself overnight. Here's the basic scenario: I use the main request handler to generate XML. I have a framework that allows me to glue together various sub-handlers (from my framework, not Apache handlers) to add disparate data elements into the XML depending on the context of the page. Then I use an output filter to process the XML using XSLT. This completely separates data from presentation. Works really well except for my current issue. Seems like a reasonable use of the Apache 2.x handler structure. So I don't actually know whether the template exists until the output filter. I don't want to pollute my data generation phase with checking ahead for the template. I'm also not sure why Apache isn't detecting that the template doesn't exist ... it should look like any other servable resource. So before I start messing with headers I think I'll look at the way my configuration file is set up. Perhaps I'm doing something stupid there. I'm using Location instead of FilesMatch (or whatever) to configure the output filter ... maybe it's something like that. Thanks again! Adam Prime wrote: If you're using the bucket brigade API you'd have to intercept the headers and modify them there. You might have an easier time doing something like this using the stream API, but i don't really know, just taking a shot in the dark. I'd think that it's certainly possible though, somehow. That said you might be better served catching whatever situation is causing you to want to do this earlier in the request cycle and keeping the response phase from doing whatever it wants to do in the first place and just causing the 404 to happen then. Adam Marc M. Adkins wrote: Hmmm...it's a bucket brigade FilterRequestHandler output filter. It seems to not care what return code I use, whatever is in the bucket brigade goes out. Can I not return Apache2::Const::NOT_FOUND from handler()? That seems odd. Marc M. Adkins wrote: I'm trying to cause a 404 error from an output filter and it isn't doing what I expect. Is this even possible? mma
Re: Can output filter return page not found?
[EMAIL PROTECTED] wrote: Sounds like something I would *not* do. If you are going to return a 404, why not do it as soon as possible. Generating data only to return a 404 sounds like useless extra work unless you are caching the same data for future requests. I agree, if you don't want to much up your data generation code, write an Access or Fixup Handler (or any other pre-response phase handler of your choice) checks for the existence of the template at that stage. If it's not there, 404. Adam
Re: Can output filter return page not found?
I'm actually thinking the same thing. I've been looking for a configuration setting that will just notice that the file isn't there and 404, but I think the fact that there IS a response handler is causing Apache to skip the check for the existence of the file. Failing a simpler configuration fix I think there's no choice but to fail early as you both suggest. It does seem like a different kind of wasted effort. Now I'm going to check for the template in an additional handler for each and every request. Since the majority of requests should be correct this is wasted cycles for most requests. Failing out of the output handler wastes the data generation phase, but that's lightweight for most of this particular site and the percentage of 404 pages will likely be also. Is: [found-ratio] * [pre-check-time] more or less than: [not-found-ratio] * [data-generation-time] ? Fortunately this is just a hobby site so I don't have to care too much. And if I care, I can always instrument the code to find out the actual values of the three variables. I do think that there should be a clear way to return a 404 (or any other code) from the output filter if desired. mma Adam Prime wrote: [EMAIL PROTECTED] wrote: Sounds like something I would *not* do. If you are going to return a 404, why not do it as soon as possible. Generating data only to return a 404 sounds like useless extra work unless you are caching the same data for future requests. I agree, if you don't want to much up your data generation code, write an Access or Fixup Handler (or any other pre-response phase handler of your choice) checks for the existence of the template at that stage. If it's not there, 404. Adam
Re: Can output filter return page not found?
Implemented Fixup handler and it works fine. Thanks all. Marc M. Adkins wrote: I'm actually thinking the same thing. I've been looking for a configuration setting that will just notice that the file isn't there and 404, but I think the fact that there IS a response handler is causing Apache to skip the check for the existence of the file. Failing a simpler configuration fix I think there's no choice but to fail early as you both suggest. It does seem like a different kind of wasted effort. Now I'm going to check for the template in an additional handler for each and every request. Since the majority of requests should be correct this is wasted cycles for most requests. Failing out of the output handler wastes the data generation phase, but that's lightweight for most of this particular site and the percentage of 404 pages will likely be also. Is: [found-ratio] * [pre-check-time] more or less than: [not-found-ratio] * [data-generation-time] ? Fortunately this is just a hobby site so I don't have to care too much. And if I care, I can always instrument the code to find out the actual values of the three variables. I do think that there should be a clear way to return a 404 (or any other code) from the output filter if desired. mma Adam Prime wrote: [EMAIL PROTECTED] wrote: Sounds like something I would *not* do. If you are going to return a 404, why not do it as soon as possible. Generating data only to return a 404 sounds like useless extra work unless you are caching the same data for future requests. I agree, if you don't want to much up your data generation code, write an Access or Fixup Handler (or any other pre-response phase handler of your choice) checks for the existence of the template at that stage. If it's not there, 404. Adam
Re: Can output filter return page not found?
Hmmm...it's a bucket brigade FilterRequestHandler output filter. It seems to not care what return code I use, whatever is in the bucket brigade goes out. Can I not return Apache2::Const::NOT_FOUND from handler()? That seems odd. Marc M. Adkins wrote: I'm trying to cause a 404 error from an output filter and it isn't doing what I expect. Is this even possible? mma
Re: Can output filter return page not found?
Thought I had it. Used $filter-r-status() to set the status code on the request from within the output filter. That would have made sense and resulted in a big d'oh! Sadly it doesn't seem to change the result either. Time to do something else for a while. Thanks in advance for any hints. mma Marc M. Adkins wrote: Hmmm...it's a bucket brigade FilterRequestHandler output filter. It seems to not care what return code I use, whatever is in the bucket brigade goes out. Can I not return Apache2::Const::NOT_FOUND from handler()? That seems odd. Marc M. Adkins wrote: I'm trying to cause a 404 error from an output filter and it isn't doing what I expect. Is this even possible? mma
Re: Can output filter return page not found?
Marc M. Adkins wrote: Can I not return Apache2::Const::NOT_FOUND from handler()? I've never used filters for this, but you can certainly return NOT_FOUND from a handler. Colin
Re: Can output filter return page not found?
If you're using the bucket brigade API you'd have to intercept the headers and modify them there. You might have an easier time doing something like this using the stream API, but i don't really know, just taking a shot in the dark. I'd think that it's certainly possible though, somehow. That said you might be better served catching whatever situation is causing you to want to do this earlier in the request cycle and keeping the response phase from doing whatever it wants to do in the first place and just causing the 404 to happen then. Adam Marc M. Adkins wrote: Hmmm...it's a bucket brigade FilterRequestHandler output filter. It seems to not care what return code I use, whatever is in the bucket brigade goes out. Can I not return Apache2::Const::NOT_FOUND from handler()? That seems odd. Marc M. Adkins wrote: I'm trying to cause a 404 error from an output filter and it isn't doing what I expect. Is this even possible? mma