in reply to HTTP request

 send($sock,"GET /HTTP/1.1\n\n",0);

You need a space between the '/' (standing for the resource to get — here top-level / document root) and the protocol (HTTP/1.1):

send($sock,"GET / HTTP/1.0\n\n",0); ^

See HTTP Request message.

___

P.S. You should normally use \r\n as newlines, as specified in the HTTP protocol — although \n is typically also understood (most web servers and browsers are rather error-tolerant).

If you use print instead of send, you can also apply the :crlf PerlIO layer:

binmode $sock, ":crlf"; print $sock "GET / HTTP/1.0\n\n";

(for some reason, the layer seems to be ignored with send)

Replies are listed 'Best First'.
Re^2: HTTP request
by sauoq (Abbot) on Mar 13, 2011 at 15:01 UTC

    That's it.

    And because the whole /HTTP/1.1 bit looks like the resource, the server is assuming HTTP/1.0 rather than HTTP/1.1, so it isn't issuing a Bad Request response for your lack of a Host Header.

    -sauoq
    "My two cents aren't worth a dime.";
      And because the whole /HTTP/1.1 bit looks like the resource, the server is assuming HTTP/1.0 rather than HTTP/1.1

      Not quite. The entire request lacks a protocol specification, so the server will treat it as a HTTP/0.9 request for a resource named /HTTP/1.1. That resource usually does not exists and results in a "404 Not Found" response.

      Of course, servers are free to refuse HTTP/0.9 and even HTTP/1.0 with a "400 Bad Request" response, but I have not yet seen such a server.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        The entire request lacks a protocol specification, so the server will treat it as a HTTP/0.9 request for a resource named /HTTP/1.1.

        Only if properly implemented. And, to be specific, the assumption wouldn't be that it was an "HTTP/0.9 request", but a simple-request which was defined in the original HTTP/1.0 RFC. Servers are supposed to respond to a simple-request with a simple-response but, in the real world, many servers respond to simple-requests with full-responses (which early 0.9 clients would not understand.)

        The important point in understanding the OP's problem is that the server defaults to assuming that the browser is speaking a version of HTTP where that request would be considered complete. Beyond that, this discussion has now become academic and rife with useless pedantry, much of which would only matter to those of us who were dealing with these niggling details in the early-mid 90s.

        -sauoq
        "My two cents aren't worth a dime.";