Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
both HTTP and HTTPS in same IW service app?
#1
Hi all-
Quick question, I think the answer is Yes, but I just wanted to confirm...
Can one single IW application (service) support both HTTP and HTTPS ?

(Im using http.sys, not OpenSSL)

Thanks.
Reply
#2
Hoping I could get a response on this from AToZed ...
Thank You.
Reply
#3
Hi,

Not the answer from Atozed but still usable I hope Smile. Yes, this is possible.
One way is to use the TIWServerController.OnBind event.

Code:
procedure TIWServerController.IWServerControllerBaseBind(const aHttpBindings, aHttpsBindings: TStrings);
begin
  aHttpBindings.Clear;
  aHttpsBindings.Clear;

  {$IFDEF DEBUG}
    aHttpBindings.Add('http://*:80/');
  {$ELSE}
    aHttpBindings.Add('http://example.com:80/');
    aHttpBindings.Add('http://www.example.com:80/');

    aHttpsBindings.Add('https://example.com:443/');
    aHttpsBindings.Add('https://www.example.com:443/');
  {$ENDIF}
end;


For https make sure SSLOptions.Port is set like for Indy servers.
Reply
#4
Yes, it is possible (and quite common) but it is the same application running both as HTTPS and HTTP.

@Jeroen's answer is correct, but there is no need to have custom code to make both bindings.... ServerController.SSLOptions.Port is also used to configure Http.sys servers.

In this case, you just need to set:


Code:
ServerController.Port := (your HTTP port, default is 80)
ServerController.SSLOptions.Port := (your HTTPS port, default is 443)


What will determine the behavior of the application is the property

ServerController.SSLOptions.NonSSLRequest

It can be either: nsAccept (default), nsRedirect and nsBlock

nsAccept: incoming requests using HTTP port will be accepted and everything will run using HTTP only protocol
nsRedirect: any incoming request using HTTP port will be redirected to HTTPS port (if HTTPS is enabled, i.e. you have ServerController.SSLOptions.Port > 0)
nsBlock: any incomping request using HTTP port will be blocked. In this case the HTTP server won't even listen to the HTTP. No response for HTTP request will be generated.

You can also have forms that are only accessible via HTTPS or HTTP and others that are accessibla via both protocols. In that case you need to use the property

IWForm.ConnectionMode

It can be either: 

cmAny (default): HTTP and HTTPS are accepted
cmSecure: Form will only accept HTTPS
cmNonSecure: Form will only accept HTTP
Reply
#5
Perfect, thanks, I look forward to trying this.  Smile
CW
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)