Pliant talk forum

Pliant talk forum

Discussion: HTTP server cleanup

Message posted by hubert.tonneau on 2003/10/02 13:29:37
I've just uploaded Pliant 87 experimental 10, and most of the HTTP layer
cleanup is now in.

One important new feature is that for each site, a default page is defined,
which is called, with virtual path set, if no standard page or virtual tree
succeeded.

The security is also more strict: a static page will be served only if it's
extension is matching the set of extension with a mime type defined.

The only missing point is that if you upload a file though a forme (as an
exemple in the file browser), then the target page is called only after
all the file as been received, and it's not perfect since it prevents to
handle the file on the file.
In other words, if the file is uploaded through the 'PUT' instruction, then
everything is perfect, but if it's uploaded through a 'POST' instruction,
there is no simple hook mechanism to handle it on the fly.
Message posted by hubert.tonneau on 2003/10/07 09:50:41
I've put back Patrice pretty listing in /pliant/appli/smart_listing.pli
called from /pliant/protocol/http/default.page

Patrice, what needs to be done futhermore in order to get the fully functionnal
pretty listing feature back ?

When this part will be ok, then it will be time for official release 87.
Message posted by hubert.tonneau on 2003/10/11 07:43:45
I've just uploaded an experimental 20 release 87, that I could also call
release candidate.

Is it ok for all of you, or should I change something more before release 87 final ?

Running Pliant services is now done through running 'fullpliant' program, no more 'run'.
The reason is that it is more meaningfull if you create an alias in the system main
applications repository.

Patrice, your pretty listing is in .pliant/appli/source_browser.pli called from
/pliant/protocol/http/default.page
Message posted by michel on 2003/10/11 10:33:57
With Windows XP
Just two things:
I prefered when port number was displayed in front of server name.
Most important I can not connect any more to secured proxies nor extra1.... nor cig.no-ip.org. 
The error message is "DNS UTP stream crashed" 

And other thing : please indicate to users that in case of updating 
they have to remove /pliant/pliant and /pliant/binary directories and fullpliant.exe file 
before extracting the pliant archive, otherwise it does not run.
Message posted by michel on 2003/10/11 14:31:56
With Linux and the same data bases all is OK
Message posted by michel on 2003/10/11 15:02:53
Win XP : With experimental21 no DNS crash but no connexion to secured proxy
Message posted by hubert.tonneau on 2003/10/11 17:40:44
> And other thing : please indicate to users that in case of updating 
> they have to remove /pliant/pliant and /pliant/binary directories and fullpliant.exe file 
> before extracting the pliant archive, otherwise it does not run.

It only appends if you are using experimental releases because the release
number does not change.
When using plain release, recompiling will append automatically,
so untarring the new release on top of the old one shoulw be ok most of the time.

> I prefered when port number was displayed in front of server name.

It does not mean much since port number is basically fixed by the RFC for all
but HTTP protocol.
Since we display the URL of the HTTP server, it should be ok.

The port of the secured proxy server is always the one of the clear text HTTP
server plus 500.
Message posted by hubert.tonneau on 2003/10/13 22:53:28
Uploaded experimental 22, with a fiew more bugfixes cleanups at the end
of the HTTP server.
Message posted by marcus on 2003/10/13 23:59:51
Some students of mine, and colleagues, have mentioned that they cannot access
my Pliant served Web pages. Is this a browser related problem?
Message posted by hubert.tonneau on 2003/10/14 00:18:39
I probably still have some bugs on the HTTP server side.

Using the HTTP server trace may help track what appends,
and even more effecient, you can use a Pliant proxy command such as:
pliant module /pliant/util/network/tcp_debug.pli command 'tcp_debug 81 "localhost" 80'
it means all connections to port 81 will be logged on the console and forwarded to port 80,
so if your colleagues try to connect to your port 81, you will be abble to monitor
all the dialog between the server and the browser.
Message posted by marcus on 2003/10/14 00:21:38
Incidentally, they all seem to be using IE...
Message posted by hubert.tonneau on 2003/10/14 00:27:26
IE is less capable to work around server tiny bugs than Mozilla.

Anyway, I still believe that I have bugs on the server side, so publish
more experimental releases.
Message posted by marcus on 2003/10/14 00:35:19
Some questions on that command

pliant module /pliant/util/network/tcp_debug.pli command 'tcp_debug 81 "localhost" 80'

1- In general, only root in a linux machine have access to ports 80 and 81. So,
do I need to have installed pliant as root to run that command?

2- If my server is running on another port, say 8081, do I use the same command 
as above with the port #s 80 and 81?
Message posted by marcus on 2003/10/14 00:45:11
> IE is less capable to work around server tiny bugs than Mozilla.

I have been accessing the same very pages with no problems. But I don't use IE.
Only Galeon, Mozilla, or Netscape.
Message posted by hubert.tonneau on 2003/10/14 01:24:28
> Some questions on that command

It's just a verbose port forwarder, so you can use any ports you want.
Message posted by hubert.tonneau on 2003/10/17 00:34:34
Starting from Pliant release 87 experimental 25, Pliant is expected to
be truely working at HTTP 1.1 level.
I've fixed chunking issue at last, and added automatic garbadge in the query
so that keep alive should better work now.
Message posted by marcus on 2003/10/19 20:34:10
I was able to pin point an error commonly reported by Internet Explorer users who try to access some of my Pliant applications.
By clicking on the link below then clicking on the login button, the expected login window won't show up.
click here
Different users have reported different behaviours: one told me when he clicks on the login button, an empty page with 'age' written on it shows up.
Message posted by marcus on 2003/10/20 00:14:38
Hi, Michel.

I know you are a Windows user. Could you please try that link? Thanks.
Message posted by michel on 2003/10/20 07:50:02
Hi Marcus
I first tried with Windows XP and Netscape : it runs correctly
but with IE6.0 I got the same message : "age", I don't know why.
Message posted by hubert.tonneau on 2003/10/20 10:41:27
I can produce the same result here.

Here are two points to track the problem:
. Marcus, first of all, you have to upgrade to release 88 because release 86
  has known bugs in the HTTP layer.
. Then, if the problem is not solved yet,
  you may want to run something like this:
  pliant module /pliant/util/network/tcp_debug.pli command 'tcp_debug 8085 "localhost" 8084 ""'
  then try to connect to port 8085 to get the log of the connection on the screen.
  You could also run:
  pliant module /pliant/util/network/tcp_debug.pli command 'tcp_debug 8085 "localhost" 8084 "file:/tmp/http.log"'
  in order to get the log in the /tmp/http.log file.

Now, if your in your configuration the page is forwarder from a server to another,
I mean the request is received by one Pliant HTTP server, but truely hanled by
another one, just like we for /pliantdocs/ on pliant.cx site, then the forwarder
site must run release 88 because there is a known bug in this area in releases
before 87.
Message posted by hubert.tonneau on 2003/10/20 11:04:09
I've copied your test page to http://pliant.cx/bug/test.html
(and upgraded it to release 88) and it seems to work properly even with IE 6.
Message posted by maybe Marcus on 2003/10/20 16:30:05
I have installed release 88. But I can't get the login working on *any* browser.

Please visit the site below to verify:

http://141.117.18.128:8084/co-op/indextest.html

Whose source code is

if not allowed:"administrator"
  execute_dynamic_page "logintest.html"
else
  text "test"

The source code for logintest.page is 

para
  button (shunt user_name="" "Login" "Change login" )
    goto_url "/co-op/newlogin.html" options "link "+(string http_request:path)+" user "+(string user_name)

And finally, newlogin.page is

var Str link := options option "link" Str
var Str user := options option "user" Str
if user_name=user
  reset_http_answer
  http_request send_authentification_request
else
  goto_url link
Message posted by hubert.tonneau on 2003/10/20 16:35:09
It works on pliant.cx, so all you need is probably restart your HTTP server
after you fixed the compile issues in your pages.
Message posted by maybe Marcus on 2003/10/20 17:54:02
I have restarted the server.

Things are getting interesting. Now I have the following page


title "test"
button "test"
  text "mytest"
note "test"
  text "mytest"

When I click on the button, or the link, I see a blank page in Galeon. Netscape complains

  The document contains no data.
Message posted by maybe Marcus on 2003/10/20 18:20:02
I may have found some other bug.

I am testing the following .page file (test.page)

button "test"
  text "my test"

This file is in the directory 'co-op' inside my pliant tree.

Incidentally (i), 'co-op' is also my linux username. Hence, the true path for that
file is /home/co-op/pliant/co-op/

If I click on the button, a blank page shows up.

However, if I change the directory name from 'co-op' to 'dada', it works!

Incidentally (ii), if I change the directory name from 'co-op' to 'myco-op',
it does not work.
Message posted by hubert.tonneau on 2003/10/20 18:56:01
Ok, here is the explaination:
the minus sign is the separator now used in button URL encoding (it used to be
plus), and the path of the page is not reencoded, so the minus sign in
your path is disturbing Pliant.

With release 88, when you select a button, in the subpage, the URL looks like:
...?button-...
whereas with old releases, it looked like:
...?button+...

Basically, according to HTTP RFC, I could use any of these signs:
_.:@/$-+!*'(),
Underscore and point is excluded because used in all files names,
so I selected minus because it's the graphically simpler one, but I don't care
in facts.

What I recommend is using 'co_op' instead of 'co-op'
Message posted by maybe Marcus on 2003/10/20 19:04:24
I am not sure about other people, but I tend to use '-' a lot in my directory 
names.

I guess very few people use the '+' in their path names. So why don't keep the
'+', or use other less popular path-character symbol, such as @, !, or *

Message posted by maybe Marcus on 2003/10/20 19:18:03
It seems that in release 88, execute_dynamic_page requires the full pliant
path of the .page passed as the argument.
Message posted by hubert.tonneau on 2003/10/20 19:22:18
I agree to use star if prefered.

On the other hand, I could not reproduce your problem with execute_dynamic_page
since the following did work for me:
execute_dynamic_page "test.html"
Message posted by hubert.tonneau on 2003/10/20 19:34:24
I've uploaded a patch for you. The URL is:
http://pliant.cx/pliant/browse/forum/pliant.patch/03F28VA.hubert.heliogroup.fr/
Message posted by maybe Marcus on 2003/10/20 19:54:49
> On the other hand, I could not reproduce your problem with execute_dynamic_page
> since the following did work for me:
> execute_dynamic_page "test.html"

That problem was caused by a page which contained an execute_dynamic_page "foo.page", which had another execute_dynamic_page in it.

For instance, the following wont work in 88, but used to work in older releases:

suppose in index.page you have

  execute_dynamic_page "test.html"

and in test.page you have

  execute_dynamic_page "newlogin.html"

where newlogin.page contains

var Str link := options option "link" Str
var Str user := options option "user" Str
if user_name=user
  reset_http_answer
  http_request send_authentification_request
else
  goto_url link

Message posted by maybe Marcus on 2003/10/21 05:05:39
Release 88 refuses to serve an existing .pdf file

In a page I have a link, something of the sort

   link "name" "foo.pdf"

When I click on the link 'name', the server says 

  The requested page does not exist on this server.

Even though foo.pdf does exist, with file permissions

  -rw-r--r--
Message posted by hubert.tonneau on 2003/10/21 05:52:52
> Release 88 refuses to serve an existing .pdf file

This is a feature, and it's good from the security point of view:
Pliant HTTP server will no more service a file with an extension it does
not know.

You have three solutions to service these:
. map them to URLs through a virtual_tree.page, and use 'send_static_file'
  to send them to the browser.
. map them to URLs through using the Pliant file browser application.
. use 'declare_mime_type' instruction in /pliant/protocol/common/mime.pli
  in order to declare the new extensions.
Message posted by maybe Marcus on 2003/10/21 15:07:31
> This is a feature, and it's good from the security point of view:
> Pliant HTTP server will no more service a file with an extension it does
> not know.

Good.

How about adding this feature to the server configuration site? This
'Mime Types Settings' page would allow the user to pick the mime types of his/her
preference.

Feasible?
Message posted by maybe Marcus on 2003/10/21 15:28:56
Pretty listing of .page files has been turned off in release 88. 

Is this also a mime issue thing?

Message posted by hubert.tonneau on 2003/10/21 19:38:27
> How about adding this feature to the server configuration site?

I believe that is the best solution. I'll try to add it for release 89.
In the mean time, you may add a 'declare_mime_type' line in
/pliant/protocol/common/mime.pli by hand.

> Pretty listing of .page files has been turned off in release 88. 

Just check that 'anonymous' is granted 'browse_source' right.
Message posted by maybe Marcus on 2003/10/28 15:12:38
My server, (release 88) is not serving html pages.

When I request a html page, the browser presents an empty page.

Here is what the HTTP server traces says:


connection 03FGOUK start at 2003/10/28 14:42:19 from 141.117.18.20
query GET /courses/fall-2003/CPS883/cmf883.html HTTP/1.1
option Host: 141.117.18.128:8081
option User-Agent: Mozilla/5.0 Galeon/1.2.5 (X11; Linux i686; U;) Gecko/20020809
option Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
option Accept-Language: en
option Accept-Encoding: gzip, deflate, compress;q=0.9
option Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
option Keep-Alive: 300
option Connection: keep-alive
option Authorization: Basic TWFyY3VzIFYuIFNhbnRvczo2NjE2NjYx
option If-Modified-Since: Thu, 04 Sep 2003 13:52:54 GMT
option Cache-Control: max-age=0
user Marcus V. Santos 1 : administrator browse_pliant browse_patch browse_source everybody
site is playground.scs.ryerson.ca
answer HTTP/1.1 304 Not modified
answer Server: Pliant/88
connection 03FGOUK stop at 2003/10/28 14:42:19 from 141.117.18.20


Any idea on what is going on?
Message posted by hubert.tonneau on 2003/10/28 15:15:39
Clear your browser cache, then restart the browser.

Basically, the log says that the browser said it has a version of the file in
the cache dated Thu, 04 Sep 2003 13:52:54 GMT, and the Pliant server answers
that it's still up to date.
Message posted by maybe Marcus on 2003/10/28 15:48:13
Strange...I quit the browsers, then I deleted my cache file:
- the galeon directory cache .galeon/mozilla/galeon/Cache/
- and mozilla's .mozilla/m3santos/2kt53wpk.slt/Cache/
- and netscape's .netscape/cache


Then I tried to access that site with Mozilla, Galeon, and Netscaoe. It works with
Mozilla and Netscape, but not with Galeon.

The tracer reports the same message for Mozilla and Galeon, but a different one
for Netscape.

May be that's not actually Galeon's cache...
Message posted by hubert.tonneau on 2003/10/28 15:50:32
In order to properly clear the cache, rather use
preferences, advanced, cache, clear cache,
then restart the browser.
Message posted by maybe Marcus on 2003/10/28 16:02:15
Worked. 

Thanks.
Message posted by marcus on 2003/11/06 16:25:52
Hi.

I've noticed sth strange. There is a link in one Web page to a .txt file. When 
I click on the link for the first time, a blank page comes up (actually, a student
informed my about it, because I had posted their marks in this .txt file).

Then I tried to access, and it actually was showing the blank page. I think I 
consulted the page afterward using by typing its url, and it worked. Why?
Message posted by hubert.tonneau on 2003/11/06 16:39:23
A .txt file will be served as a static file because the .txt extension is
listed in /pliant/protocol/common/mime.pli
Message posted by marcus on 2003/11/06 20:54:42
I seem to be unable to edit and update a .page file remotely on my server.

That is, to do that, I login as administrator, then click on 'files', select
the file I want, then 'edit', edit the file, then 'Update' the file.

But when I visit the file again, my changes have not been uploaded to the server.
Message posted by hubert.tonneau on 2003/11/06 21:36:28
This is probably problem with Mozilla not accepting very long URLs.

I can edit short files with Mozilla, but not long ones.
There is no problem with Netscape 4 :-(
Using Mozilla, I have to download the file, then perform changes locally,
and finally upload it, and it's a bit boring.

Looks like Pliant browser is very much needed.
Message posted by marcus on 2003/11/27 16:05:34
Hi, Hubert.

I have posted a data file in one of my Web pages, shown below:

3
20 1 -1 17
1 -10 1 13
-1 1 10 18

The URL to this data file is

http://141.117.18.128:8081/courses/fall-2003/CCPS125/jacobi_data1.txt

I've tried to visit this page with Galeon and Konqueror. Both give me 
strange results. A page with some numbers, all in the same line, starting witj
2R00
                                             
The link works with Netscape and Mozilla.
Message posted by maybe benie fe patria on 2004/01/29 02:50:41
show me the pin configuration of 8084
Message posted by hubert.tonneau on 2004/01/29 10:58:39
If you use 'fullpliant' script to start Pliant services, then Pliant is self
deciding the TCP port to use for the HTTP server, in the 'set_port' routine
of /pliant/install/install.pli

I might change it so that you can force it to the value you like.
Message posted by hubert.tonneau on 2004/01/29 11:11:19
Here is the new 'set_port' function for you:

function set_port
  part scan
    if not (this_computer:env:"pliant":"http":"port" parse (var Int existing))
      existing := undefined
    for (var Int lap) (shunt existing<>undefined -2 -1) 9
      var Int port := shunt lap=(-2) existing lap=(-1) 80 8080+lap
      (var Stream s) open "tcp://127.0.0.1/client/"+string:port in+out+safe
      if s=failure
        (var Stream s) open "tcp:/server/"+string:port "noautoconnect close" in+out+safe
        if s=success
          s close
          (var Stream s) open "tcp://127.0.0.1/client/"+string:port in+out+safe
          leave scan
    console "ERROR: Could not find a valid TCP port for the Pliant HTTP server." eol
    return
  this_computer "pliant" "http" "port" := string port
  this_computer_database store

Now you can go to 'configure' 'sites' 'HTTP and FTP global settings' and set
it TCP port you like: it will not be changed on restart unless the port is
already used by another service.