Thanks for replying,

On 2006-08-25, 13:04, Perrin Harkins wrote:
> HTTP has defined roles of client and server.  You can't make HTTP
> requests and respond to other HTTP requests on a single socket
> connection, at least not without writing your own protocol which will
> not really be HTTP.

I may have explained that awkwardly. I realize that there has to be
one client, and one server. The CPE is the client, sending HTTP POST
_queries_ with some data. The remote management server (apache server)
is sending HTTP POST _replies_ back, but those also contains data.

This is the logic:

CPE client:
        POST /path/to/resource HTTP/1.1
        Content-Type: text/xml; charset=ISO-8859-1
        
        ...soap data...

server:
        HTTP/1.1 200 OK
        Content-Type: text/xml;charset=utf-8

        ...soap data...

CPE client:
        POST /path/to/resource HTTP/1.1
        Content-Type: text/xml; charset=ISO-8859-1
        
        ...soap data...

server:
        HTTP/1.1 200 OK
        Content-Type: text/xml;charset=utf-8

        ...soap data...


.. and so on .. data is flowing in both directions, but there is
still one HTTP client (the CPE), and one server (the apache server).

> Are you sure that they are really supposed to swap roles?

I don't think they should. The CPE is the HTTP client, and the
apache server is the HTTP server.

> Normally with SOAP one client makes a POST request and the server
> responds with a response body.  The connection can be kept open
> with normal HTTP 1.1 mechanisms (all done for you by apache) [...]

Great. I've set "KeepAlive On" in httpd.conf .. and I'm also this
config:

Alias /perl/ /home/en/modperl/
PerlModule ModPerl::Registry
<Location /perl>
    #SetEnv proxy-sendcl 1
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    Options +ExecCGI
    PerlOptions +ParseHeaders
    Order allow,deny
    Allow from all
</Location>

The problem I am having is that I don't know how to access those
HTTP POSTS. In the examples I've read in the documentation, it says
that the (first) request can be accessed by:

my $r = Apache2::RequestUtil->request;

.. but when I have read the headers and the data in the first POST
request, I'm not sure what to do in order to access the _second_
POST query.

Can I throw the first $r away, and initialize a new one, or can I
reset the first one, making it ready to receive a new HTTP request?

As I'm writing this, I think that one one solution is to send a 
session cookie to the CPE in the response to the the first HTTP
POST, store the session ID in some way locally, and then exit the
script. The next HTTP POST from the same CPE will then include a
session ID, which I can use to keep track of all the HTTP POSTS from
the same host.

I'll try that :-)

> but if you really need to have the server make a request to the
> client you will need to use something like LWP on a separate
> socket.

It doesn't have to make a (HTTP) request, I think. The server can
communicate back to the client in the HTTP POST _response_.

-- 
Erland Nylend
Telenor

Reply via email to