Why is apache not passing Location header from cgi script back to client












0















I have an existing cgi web app which used to work fine, but whose behaviour has changed.



One of the cgi programs (under certain conditions) returns a Location header, to cause a redirect.



The Location header never reaches the web browser - instead, Apache seems to return the contents of the page the Location header redirects to.



Unfortunately that page contains javascript which uses the query string inside the Location header - but with this new behaviour the query string is empty, because the browser still thinks the location is the original cgi script.



Why has theis behaviour changed, and what can I do to prevent it happening?










share|improve this question























  • Apparently, the key is whether an absolute URL is specified in the Location header.

    – Daniel B
    Jan 7 at 14:30











  • Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

    – Nikki Locke
    Jan 7 at 15:12
















0















I have an existing cgi web app which used to work fine, but whose behaviour has changed.



One of the cgi programs (under certain conditions) returns a Location header, to cause a redirect.



The Location header never reaches the web browser - instead, Apache seems to return the contents of the page the Location header redirects to.



Unfortunately that page contains javascript which uses the query string inside the Location header - but with this new behaviour the query string is empty, because the browser still thinks the location is the original cgi script.



Why has theis behaviour changed, and what can I do to prevent it happening?










share|improve this question























  • Apparently, the key is whether an absolute URL is specified in the Location header.

    – Daniel B
    Jan 7 at 14:30











  • Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

    – Nikki Locke
    Jan 7 at 15:12














0












0








0








I have an existing cgi web app which used to work fine, but whose behaviour has changed.



One of the cgi programs (under certain conditions) returns a Location header, to cause a redirect.



The Location header never reaches the web browser - instead, Apache seems to return the contents of the page the Location header redirects to.



Unfortunately that page contains javascript which uses the query string inside the Location header - but with this new behaviour the query string is empty, because the browser still thinks the location is the original cgi script.



Why has theis behaviour changed, and what can I do to prevent it happening?










share|improve this question














I have an existing cgi web app which used to work fine, but whose behaviour has changed.



One of the cgi programs (under certain conditions) returns a Location header, to cause a redirect.



The Location header never reaches the web browser - instead, Apache seems to return the contents of the page the Location header redirects to.



Unfortunately that page contains javascript which uses the query string inside the Location header - but with this new behaviour the query string is empty, because the browser still thinks the location is the original cgi script.



Why has theis behaviour changed, and what can I do to prevent it happening?







apache-http-server redirection cgi






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 7 at 14:23









Nikki LockeNikki Locke

13018




13018













  • Apparently, the key is whether an absolute URL is specified in the Location header.

    – Daniel B
    Jan 7 at 14:30











  • Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

    – Nikki Locke
    Jan 7 at 15:12



















  • Apparently, the key is whether an absolute URL is specified in the Location header.

    – Daniel B
    Jan 7 at 14:30











  • Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

    – Nikki Locke
    Jan 7 at 15:12

















Apparently, the key is whether an absolute URL is specified in the Location header.

– Daniel B
Jan 7 at 14:30





Apparently, the key is whether an absolute URL is specified in the Location header.

– Daniel B
Jan 7 at 14:30













Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

– Nikki Locke
Jan 7 at 15:12





Aha! I never knew that. If you make your comment into an answer, I will happily accept it.

– Nikki Locke
Jan 7 at 15:12










1 Answer
1






active

oldest

votes


















1














According to this answer, CGI specifies two different types of redirects: internal and external.



Internal redirects (invisible to the browser) are used when you specify a URL without scheme and host (like otherpage.html or /index.html) in the Location header.



External redirects (performed by the browser) are used only when you specify an absolute URL (ie. http://www.example.com/some/other/page). Absolute URLs must start with the scheme (ie. http).



RFC 3875 contains the relevant documentation:




The Location header field is used to specify to the server that the
script is returning a reference to a document rather than an actual
document (see sections 6.2.3 and 6.2.4). It is either an absolute
URI (optionally with a fragment identifier), indicating that the
client is to fetch the referenced document, or a local URI path
(optionally with a query string), indicating that the server is to
fetch the referenced document and return it to the client as the
response.







share|improve this answer























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "3"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1391517%2fwhy-is-apache-not-passing-location-header-from-cgi-script-back-to-client%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    According to this answer, CGI specifies two different types of redirects: internal and external.



    Internal redirects (invisible to the browser) are used when you specify a URL without scheme and host (like otherpage.html or /index.html) in the Location header.



    External redirects (performed by the browser) are used only when you specify an absolute URL (ie. http://www.example.com/some/other/page). Absolute URLs must start with the scheme (ie. http).



    RFC 3875 contains the relevant documentation:




    The Location header field is used to specify to the server that the
    script is returning a reference to a document rather than an actual
    document (see sections 6.2.3 and 6.2.4). It is either an absolute
    URI (optionally with a fragment identifier), indicating that the
    client is to fetch the referenced document, or a local URI path
    (optionally with a query string), indicating that the server is to
    fetch the referenced document and return it to the client as the
    response.







    share|improve this answer




























      1














      According to this answer, CGI specifies two different types of redirects: internal and external.



      Internal redirects (invisible to the browser) are used when you specify a URL without scheme and host (like otherpage.html or /index.html) in the Location header.



      External redirects (performed by the browser) are used only when you specify an absolute URL (ie. http://www.example.com/some/other/page). Absolute URLs must start with the scheme (ie. http).



      RFC 3875 contains the relevant documentation:




      The Location header field is used to specify to the server that the
      script is returning a reference to a document rather than an actual
      document (see sections 6.2.3 and 6.2.4). It is either an absolute
      URI (optionally with a fragment identifier), indicating that the
      client is to fetch the referenced document, or a local URI path
      (optionally with a query string), indicating that the server is to
      fetch the referenced document and return it to the client as the
      response.







      share|improve this answer


























        1












        1








        1







        According to this answer, CGI specifies two different types of redirects: internal and external.



        Internal redirects (invisible to the browser) are used when you specify a URL without scheme and host (like otherpage.html or /index.html) in the Location header.



        External redirects (performed by the browser) are used only when you specify an absolute URL (ie. http://www.example.com/some/other/page). Absolute URLs must start with the scheme (ie. http).



        RFC 3875 contains the relevant documentation:




        The Location header field is used to specify to the server that the
        script is returning a reference to a document rather than an actual
        document (see sections 6.2.3 and 6.2.4). It is either an absolute
        URI (optionally with a fragment identifier), indicating that the
        client is to fetch the referenced document, or a local URI path
        (optionally with a query string), indicating that the server is to
        fetch the referenced document and return it to the client as the
        response.







        share|improve this answer













        According to this answer, CGI specifies two different types of redirects: internal and external.



        Internal redirects (invisible to the browser) are used when you specify a URL without scheme and host (like otherpage.html or /index.html) in the Location header.



        External redirects (performed by the browser) are used only when you specify an absolute URL (ie. http://www.example.com/some/other/page). Absolute URLs must start with the scheme (ie. http).



        RFC 3875 contains the relevant documentation:




        The Location header field is used to specify to the server that the
        script is returning a reference to a document rather than an actual
        document (see sections 6.2.3 and 6.2.4). It is either an absolute
        URI (optionally with a fragment identifier), indicating that the
        client is to fetch the referenced document, or a local URI path
        (optionally with a query string), indicating that the server is to
        fetch the referenced document and return it to the client as the
        response.








        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 7 at 21:21









        Daniel BDaniel B

        33.6k76287




        33.6k76287






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Super User!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1391517%2fwhy-is-apache-not-passing-location-header-from-cgi-script-back-to-client%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

            Mangá

            Eduardo VII do Reino Unido