v0.1.0

HTTP Probing

This page explains how Monitor.Check() decides whether a site is online: URL normalization, when it switches from HEAD to GET, timeouts, and the online criteria.

URL Normalization

When the input URL does not start with http, https:// is prepended (internal/service/monitor.go:75).

Input Actual request
example.com https://example.com
https://example.com/health Unchanged
http://example.com Unchanged (requested over HTTP)

The normalized URL is written to list[].url in .webMonitor.json, and the watch list loads that value after a restart; see Known Limitations for the impact.

Request Flow

graph TB
    Start[Check url] --> Norm[Prepend https://]
    Norm --> Head[Send HEAD]
    Head -->|connection error or 404| Get[Send GET]
    Head -->|any other status| Judge
    Get --> Judge{Got a response?}
    Judge -->|Yes| SSL[CheckExpire reads certificate]
    SSL --> Code[Judge online by status code]
    Judge -->|No| Offline[Offline, Code = 0]
Item Value
First request HEAD
Switch to GET when HEAD hits a connection error (including timeout) or returns 404
Timeout http.Client.Timeout of 10 seconds, counted separately for HEAD and GET
Redirects Followed
Request headers User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36, Accept: */*, Connection: keep-alive

Only connection errors and 404 trigger GET. When a server rejects HEAD with 405 (Method Not Allowed) or any other 4xx / 5xx, the check does not retry with GET and marks the site offline.

Online Criteria

Result online code
Status code 200–399 true Actual status code
Status code ≥ 400 false Actual status code
Connection failure, timeout, DNS error false 0

duration records the total time from start to response, including the GET retry after a failed HEAD, and the table shows it in milliseconds.

When the SSL Check Runs

util.CheckExpire() reads the certificate only when the request got a response (any status code); on connection failure the SSL field is 0. See SSL Expiry for details.

中文