API voor beveiligingsheaders API-referentie
Beoordeel HSTS, CSP, frame-beveiliging en andere HTTP-beveiligingsheaders. Gebruik deze referentie om een bewerking te kiezen en het gedocumenteerde responsecontract te integreren.
Bewerkingen
GET /v1/headers
GET
/v1/headers
Tegoeden: 1
Queryparameters
| Parameter | Type | vereist |
|---|---|---|
| url | string | optioneel |
| domain | string | optioneel |
Antwoordvelden
| Veld | Type |
|---|---|
classification |
object |
classification.status |
string |
classification.reason |
string |
classification.evidence |
object |
classification.evidence.source |
string |
classification.evidence.method |
string |
classification.evidence.observed_at |
string |
classification.evidence.detail |
string |
classification.checked_at |
string |
url |
string |
domain |
string |
status |
string |
checked_at |
string |
final_url |
string | null |
http_status |
integer | null |
redirect_count |
integer | null |
https |
boolean | null |
score |
integer | null |
grade |
string | null |
summary |
object |
summary.passed |
integer |
summary.warned |
integer |
summary.failed |
integer |
summary.missing |
integer |
summary.not_applicable |
integer |
summary.hsts_preload_ready |
boolean |
summary.csp_strict |
boolean |
checks[] |
object[] |
checks[] |
object |
checks[].id |
string |
checks[].status |
string |
checks[].value |
string | null |
checks[].detail_code |
string |
checks[].issues[] |
string[] |
checks[].weight |
integer |
checks[].classification |
object |
checks[].classification.status |
string |
checks[].classification.reason |
string |
checks[].classification.evidence |
object |
checks[].classification.evidence.source |
string |
checks[].classification.evidence.method |
string |
checks[].classification.evidence.observed_at |
string |
checks[].classification.evidence.detail |
string |
checks[].classification.checked_at |
string |
cookies[] |
object[] |
cookies[] |
object |
cookies[].name |
string |
cookies[].secure |
boolean |
cookies[].http_only |
boolean |
cookies[].same_site |
string | null |
cookies[].issues[] |
string[] |
headers_raw |
object |
recommendations[] |
string[] |
fetch |
object |
fetch.checked_url |
string |
fetch.http_status |
integer | null |
fetch.final_url |
string | null |
fetch.via_proxy |
boolean | null |
fetch.redirect_count |
integer | null |
fetch.unknown_reason |
string | null |
caveats[] |
string[] |
rubric_version |
string |
Voorbeeldverzoek
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/headers?url=https%3A%2F%2Fexample.com&domain=example.com"const response = await fetch("https://domscan.net/v1/headers?url=https%3A%2F%2Fexample.com&domain=example.com", {
headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);import os
import requests
response = requests.get(
"https://domscan.net/v1/headers?url=https%3A%2F%2Fexample.com&domain=example.com",
headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/headers?url=https%3A%2F%2Fexample.com&domain=example.com", nil)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(resp.Status, string(data))
}require "json"
require "net/http"
uri = URI("https://domscan.net/v1/headers?url=https%3A%2F%2Fexample.com&domain=example.com")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))Voorbeeldantwoord
{
"url": "https://example.com/",
"domain": "example.com",
"status": "ok",
"checked_at": "2026-10-09T10:15:30.000Z",
"final_url": "https://www.example.com/",
"http_status": 200,
"redirect_count": 1,
"https": true,
"score": 75,
"grade": "C",
"summary": {
"passed": 6,
"warned": 2,
"failed": 0,
"missing": 2,
"not_applicable": 1,
"hsts_preload_ready": false,
"csp_strict": false
},
"checks": [
{
"id": "strict_transport_security",
"status": "pass",
"value": "max-age=31536000",
"detail_code": "enabled",
"issues": [
"include_subdomains_missing",
"preload_missing"
],
"weight": 20
},
{
"id": "content_security_policy",
"status": "warn",
"value": "default-src 'self'; script-src 'self' 'unsafe-inline'",
"detail_code": "unsafe_inline",
"issues": [
"missing_object_src",
"missing_base_uri",
"unsafe_inline"
],
"weight": 25
},
{
"id": "clickjacking",
"status": "pass",
"value": "SAMEORIGIN",
"detail_code": "x_frame_options_sameorigin",
"issues": [],
"weight": 10
},
{
"id": "x_content_type_options",
"status": "pass",
"value": "nosniff",
"detail_code": "nosniff",
"issues": [],
"weight": 10
},
{
"id": "referrer_policy",
"status": "pass",
"value": "strict-origin-when-cross-origin",
"detail_code": "strict_origin_when_cross_origin",
"issues": [],
"weight": 10
},
{
"id": "permissions_policy",
"status": "missing",
"value": null,
"detail_code": "header_missing",
"issues": [],
"weight": 5
},
{
"id": "cross_origin_opener_policy",
"status": "pass",
"value": "same-origin",
"detail_code": "same_origin",
"issues": [],
"weight": 5
},
{
"id": "cross_origin_embedder_policy",
"status": "not_applicable",
"value": null,
"detail_code": "not_set_informational",
"issues": [],
"weight": 0
},
{
"id": "cross_origin_resource_policy",
"status": "missing",
"value": null,
"detail_code": "header_missing",
"issues": [],
"weight": 5
},
{
"id": "information_disclosure",
"status": "warn",
"value": "server: nginx/1.25.3",
"detail_code": "version_disclosed",
"issues": [
"server_version_disclosed"
],
"weight": 5
},
{
"id": "cookies",
"status": "pass",
"value": "session",
"detail_code": "all_flags_set",
"issues": [],
"weight": 5
}
],
"cookies": [
{
"name": "session",
"secure": true,
"http_only": true,
"same_site": "lax",
"issues": []
}
],
"headers_raw": {
"strict-transport-security": "max-age=31536000",
"content-security-policy": "default-src 'self'; script-src 'self' 'unsafe-inline'",
"x-frame-options": "SAMEORIGIN",
"x-content-type-options": "nosniff",
"referrer-policy": "strict-origin-when-cross-origin",
"cross-origin-opener-policy": "same-origin",
"server": "nginx/1.25.3"
},
"recommendations": [
"remove_csp_unsafe_inline",
"add_csp_object_src_none",
"add_csp_base_uri",
"add_hsts_include_subdomains",
"add_hsts_preload",
"add_permissions_policy",
"add_cross_origin_resource_policy",
"hide_server_version"
],
"fetch": {
"checked_url": "https://example.com/",
"http_status": 200,
"final_url": "https://www.example.com/",
"via_proxy": true,
"redirect_count": 1,
"unknown_reason": null
},
"caveats": [
"set_cookie_visibility_limited",
"meta_csp_not_evaluated"
],
"rubric_version": "2026-10-09.1"
}
HTTP-statuscodes
200OK400Ongeldig verzoek401Niet geautoriseerd402Betaling vereist429Te veel verzoeken502Gatewayfout