Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The <Site> element provides a piece of functionality missing from IIS, namely the ability to obtain canonical scheme, host, and port information about an incoming request without just relying on the HTTP request. In addition to being untrustworthy, the client request also contains physical details about the request, which may be completely different from the logical details, which is an issue any time virtualization is involved.

Note

If you’re getting 404 errors trying to access handlers on a site, one common cause is screwing up this element, particularly adding settings you don’t need. Unless you’re virtualizing a site, the only attributes that should be present are id and name. Setting port or sslport (and doing it incorrectly) can cause the system to misinterpret the request and actually NOT intervene to handle it.

As an example, consider a proxy or load balancer that runs at "https://service.example.org", and that sits in front of a pair of IIS servers running on port 8080 without TLS enabled. The actual HTTP request to one of those servers might represent the URL "http://ws1prod.example.org:8080"

...

The following attributes are supported:

Name

Type

RequiredReq?

Default

Description

id

string

Y

The IIS instance ID of the web site to protect. Newer IIS versions actually display this value in the administration tool.

name

string

Y

Canonical logical hostname for the web site

port

integer

80

Logical port for requests if the physical request does not include TLS. Do NOT set this attribute unless you are virtualizing.

sslport

integer

443

Logical port for requests if the physical request includes TLS. Do NOT set this attribute unless you are virtualizing.

scheme

string

http or
https

Logical scheme for requests, the default depending on the physical use or non-use of TLS. Do NOT set this attribute unless you are virtualizing.

useVariables

boolean

value from <ISAPI> element

Controls whether attributes are passed to the application as Server Variables

useHeaders

boolean

value from <ISAPI> element

Controls whether attributes are passed as HTTP Headers.

This setting should be avoided, but is present to provide a level of compatibility with applications developed against the old ISAPI extension.

...