Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: How to remove HTTP Keep-Alive 300 header from LWP::UserAgent request

by jeffenstein (Friar)
on Apr 26, 2018 at 09:55 UTC ( #1213593=note: print w/replies, xml ) Need Help??


in reply to How to remove HTTP Keep-Alive 300 header from LWP::UserAgent request

Since you've asked for keep-alives in the constructor: my $ua = LWP::UserAgent->new(keep_alive => 1, send_te => 0) ; then LWP will add both the Connection: keep-alive and the Keep-Alive: 300, as the standard specifies

According to the LWP::UserAgent docs, the argument to keep_alive is the maximum number of connections to cache, so if you do need keep-alives, then 1 is probably not the right number.

Replies are listed 'Best First'.
Re^2: How to remove HTTP Keep-Alive 300 header from LWP::UserAgent request
by Veltro (Hermit) on Apr 26, 2018 at 14:34 UTC

    Sorry but that does not sound right to me. In think that the implementation is incorrect. There is no standard that says the Keep-Alive: 300 header is mandatory. E.g. from the 5 Internet Browsers I have looked at, none of them sends this header.

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive

    quote: The Keep-Alive general header allows the sender to hint about how the connection and may be used to set a timeout and a maximum amount of requests.

    https://tools.ietf.org/html/rfc2068#section-19.7.1.1

    quote: When the Keep-Alive connection-token has been transmitted with a request or a response, a Keep-Alive header field MAY also be included

    Another thing is that to me this header looks parameterized in form in both request and response (according to each of the specifications mentioned, including the one you have provided). Thus not of the form 'Header : value'

    Regards the keep_alive argument I think you are mixing it up. The keep_alive argument is in the 'new' of the LWP::UserAgent and is not related to the "Keep-Alive: 300" header. Quote from LWP::UserAgent: "The keep_alive value is passed on as the total_capacity for the connection cache".

      The actual code that adds the header is in Net::HTTP::Methods, at line 180 in the current version.

      if ($self->keep_alive) { if ($peer_ver eq "1.0") { # from looking at Netscape's headers push(@h2, "Keep-Alive: 300"); unshift(@connection, "Keep-Alive"); } }

      So, I would guess that Net::HTTP believes your connection is http/1.0, and is therefore sending the http/1.0 header. If it's not, maybe you can make a bug report against the module?

        Thanks for pointing that out to me. I already found a way to change extra options before and I managed to combine the information that you gave me into this solution:

        use LWP::Protocol::http ; push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, PeerHTTPVersion => 1.1) ;

        and addding the Connection header to ns_headers:

        my @ns_headers = ( 'Connection' => 'Keep-Alive', ... }

        So, I would guess that Net::HTTP believes your connection is http/1.0, and is therefore sending the http/1.0 header. If it's not, maybe you can make a bug report against the module?

        Hi,

        For what purpose? What would it solve?

      E.g. from the 5 Internet Browsers I have looked at, none of them sends this header.

      Are any of these browsers from 1995? First came keep-alive, then came the RFC, thats history for you

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1213593]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2020-11-26 02:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?