Menu

#454 Referer header is not sent

Latest SVN
closed
None
5
2014-06-08
2007-04-03
No

On clicking a hyperlink or submitting a form, 'Referer' HTTP header should be sent.

To test it, you have to use pages hosted in web container. Second page prints 'null' using HtmlUnit, and prints 'page1.jsp' URL using browser.


link1.jsp

<head>Title 1</head>
Second Page


link2.jsp

<head>Title 2</head>
<%System.out.println(request.getHeader( "referer" ) );%>


Code:

    String url = "http://server/webapp/link1.jsp";
    WebClient client = new WebClient();
    CollectingAlertHandler collectingAlertHandler = new CollectingAlertHandler();
    client.setAlertHandler( collectingAlertHandler );
    HtmlPage page1 = (HtmlPage)client.getPage( url );
    HtmlPage page2 = (HtmlPage)page1.getAnchorByHref("link2.jsp" ).click();

Discussion

  • Ahmed Ashour

    Ahmed Ashour - 2007-04-03

    Logged In: YES
    user_id=950730
    Originator: YES

    Attached is a patch for HtmlAnchor, and HtmlForm

    To test the difference, you need a web container:


    link1.jsp

    <head>Title 1</head>
    <form method="post" action="link2.jsp" name="myForm">
    <input type="submit" value="Second Page" name="hello">
    </form>
    <%System.out.println("link1.jsp: " + request.getHeader( "referer" ) );%>


    link2.jsp

    <head>Title 2</head>
    Third Page
    <%System.out.println("link2.jsp: " + request.getHeader( "referer" ) );%>


    link3.jsp

    <head>Title 3</head>
    <%System.out.println("link3.jsp: " + request.getHeader( "referer" ) );%>


    Code:
    String url = "http://hostname/webapp/link1.jsp";
    WebClient client = new WebClient();
    CollectingAlertHandler collectingAlertHandler = new CollectingAlertHandler();
    client.setAlertHandler( collectingAlertHandler );
    HtmlPage page1 = (HtmlPage)client.getPage( url );
    HtmlPage page2 = (HtmlPage)page1.getFormByName( "myForm" ).getInputByName( "hello" ).click();
    HtmlPage page3 = (HtmlPage)page2.getAnchorByHref("link3.jsp" ) .click();

    File Added: refererHeader.patch

     
  • Marc Guillemot

    Marc Guillemot - 2007-04-05

    Logged In: YES
    user_id=402164
    Originator: NO

    The current way to test such things in htmlunit unit tests is to use a MockConnection and to ask it about the header used to perform the last request.

    What about following cases:
    - frameset: I guess that frames should be requested with the frameset as referer
    - window.open: if I correctly remember, FF sets the page where the script loads as referer whereas IE doesn't set any referer

     
  • Ahmed Ashour

    Ahmed Ashour - 2007-04-05

    Logged In: YES
    user_id=950730
    Originator: YES

    You are absolutely right regarding frameset and window.open.

    Attached is the patch.

     
  • Ahmed Ashour

    Ahmed Ashour - 2007-04-05

    Logged In: YES
    user_id=950730
    Originator: YES

    File Added: refererHeader.patch

     
  • Marc Guillemot

    Marc Guillemot - 2007-04-06

    Logged In: YES
    user_id=402164
    Originator: NO

    nearly perfect but I still have one question: what does HtmlPage.getOriginatingUrl() bring compared to HtmlPage.getWebResponse().getUrl()?

     
  • Ahmed Ashour

    Ahmed Ashour - 2007-04-06

    Patch

     
  • Ahmed Ashour

    Ahmed Ashour - 2007-04-06

    Logged In: YES
    user_id=950730
    Originator: YES

    nearly perfect but I still have one question: what does HtmlPage.getOriginatingUrl() bring

    Nothing, sorry I didn't know about that.

    Please find attached.
    File Added: refererHeader.patch

     
  • Marc Guillemot

    Marc Guillemot - 2007-04-06

    Logged In: YES
    user_id=402164
    Originator: NO

    Patch applied. Thanks.

    I've simplified a bit the change in WebClient and added some "final" keywords.

     

Log in to post a comment.