This is an automated email from the ASF dual-hosted git repository. bcall pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/trafficserver-site.git
commit f388e75f0365def89819a1426ee50349fa5c3a8c Author: Bryan Call <[email protected]> AuthorDate: Thu Jan 8 13:40:25 2026 -0800 Modernize Via Decoder page with Tailwind CSS - Move via.html from /tools/ to root /content/ - Update to modern Tailwind CSS design matching rest of site - Add link to Via Decoder from main page Web Resources section - Remove old tools/ directory --- content/index.html | 4 + content/tools/via.html | 220 ------------------------ content/via.html | 317 +++++++++++++++++++++++++++++++++++ source/templates/index.template.html | 4 + 4 files changed, 325 insertions(+), 220 deletions(-) diff --git a/content/index.html b/content/index.html index 259981a..04e9f76 100644 --- a/content/index.html +++ b/content/index.html @@ -279,6 +279,10 @@ To update: <a href="https://docs.trafficserver.apache.org/en/latest/developer-guide/index.en.html" class="text-accent hover:underline font-medium">Developer's Guide</a> <p class="text-gray-600 text-sm mt-1">Developing Apache Traffic Server plug-ins and how the code works</p> </li> + <li> + <a href="/via.html" class="text-accent hover:underline font-medium">Via Header Decoder</a> + <p class="text-gray-600 text-sm mt-1">Parse and understand ATS Via headers for debugging</p> + </li> </ul> </div> </div> diff --git a/content/tools/via.html b/content/tools/via.html deleted file mode 100644 index c17dad8..0000000 --- a/content/tools/via.html +++ /dev/null @@ -1,220 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <!-- The 1140px Grid - https://cssgrid.net/ --> - <link rel="stylesheet" type="text/css" href="/styles/1140.css" media="screen" /> - <link rel="stylesheet" type="text/css" href="/styles/styles.css" media="screen" /> - <!--css3-mediaqueries-js - https://code.google.com/p/css3-mediaqueries-js/ - Enables media queries in some unsupported browsers--> - <script type="text/javascript" src="/js/css3-mediaqueries.js"></script> - <!-- Google Fonts removed for ASF CSP compliance --> - <title>Via Decoder - Apache Traffic Server</title> - <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at . https://www.apache.org/licenses/LICENSE-2.0 . Unless required by appli [...] - <script type="text/javascript"> -var codes = {} -codes[1] = {} -codes[1]['title'] = "client-info Request headers received from client. Value is one of:" -codes[1]['I'] = "If Modified Since (IMS)" -codes[1]['C'] = "cookie" -codes[1]['E'] = "error in request" -codes[1]['S'] = "simple request (not conditional)" -codes[1]['N'] = "no-cache" -codes[2] = {} -codes[2]['title'] = "cache-lookup Result of Traffic Server cache lookup for URL. Value is one of:" -codes[2]['A'] = "in cache, not acceptable (a cache \"MISS\")" -codes[2]['H'] = "in cache, fresh (a cache \"HIT\")" -codes[2]['S'] = "in cache, stale (a cache \"MISS\")" -codes[2]['R'] = "in cache, fresh Ram hit (a cache \"HIT\")" -codes[2]['M'] = "miss (a cache \"MISS\")" -codes[2][' '] = "no cache lookup performed" -codes[3] = {} -codes[3]['title'] = "server-info Response information received from origin server. Value is one of:" -codes[3]['E'] = "error in response" -codes[3][' '] = "no server connection needed" -codes[3]['S'] = "served" -codes[3]['N'] = "not-modified" -codes[4] = {} -codes[4]['title'] = "cache-fill Result of document write to cache. Value is one of:" -codes[4]['U'] = "updated old cache copy" -codes[4]['D'] = "cached copy deleted" -codes[4]['W'] = "written into cache (new copy)" -codes[4][' '] = "no cache write performed" -codes[5] = {} -codes[5]['title'] = "proxy-info Proxy operation result. Value is one of:" -codes[5]['R'] = "origin server revalidated" -codes[5][' '] = "unknown?" -codes[5]['S'] = "served" -codes[5]['N'] = "not-modified" -codes[6] = {} -codes[6]['title'] = "error-codes Value is one of:" -codes[6]['A'] = "authorization failure" -codes[6]['H'] = "header syntax unacceptable" -codes[6]['C'] = "connection to server failed" -codes[6]['T'] = "connection timed out" -codes[6]['S'] = "server related error" -codes[6]['D'] = "dns failure" -codes[6]['N'] = "no error" -codes[6]['F'] = "request forbidden" -codes[7] = {} -codes[7]['title'] = "tunnel-info Proxy-only service operation. Value is one of:" -codes[7][' '] = "no tunneling" -codes[7]['U'] = "tunneling because of url (url suggests dynamic content)" -codes[7]['M'] = "tunneling due to a method (e.g. CONNECT)" -codes[7]['O'] = "tunneling because cache is turned off" -codes[7]['F'] = "tunneling due to a header field (such as presence of If-Range header)" -codes[8] = {} -codes[8]['title'] = "cache-type and cache-lookup cache result values (2 characters)" -codes[8]['I'] = "icp" -codes[8][' '] = "cache miss or no cache lookup" -codes[8]['C'] = "cache" -codes[9] = {} -codes[9]['title'] = "cache-lookup-result character value is one of:" -codes[9][' '] = "no cache lookup" -codes[9]['S'] = "cache hit, but expired" -codes[9]['U'] = "cache hit, but client forces revalidate (e.g. Pragma: no-cache)" -codes[9]['D'] = "cache hit, but method forces revalidated (e.g. ftp, not anonymous)" -codes[9]['I'] = "conditional miss (client sent conditional, fresh in cache, returned 412)" -codes[9]['H'] = "cache hit" -codes[9]['M'] = "cache miss (url not in cache)" -codes[9]['C'] = "cache hit, but config forces revalidate" -codes[9]['N'] = "conditional hit (client sent conditional, doc fresh in cache, returned 304)" -codes[10] = {} -codes[10]['title'] = "parent-proxy parent proxy connection status" -codes[10][' '] = "no parent proxy" -codes[10]['S'] = "connection opened successfully" -codes[10]['F'] = "connection open failed" -codes[11] = {} -codes[11]['title'] = "server-conn-info origin server connection status" -codes[11][' '] = "no server connection" -codes[11]['S'] = "connection opened successfully" -codes[11]['F'] = "connection open failed" - -function showVia(form, value) { - var text = value? value : form.via.value; - if (value) { - document.getElementById("via").value = value; - } - var via = document.getElementById("viaoutput") - var output = ""; - var txtonly = text.match(/([a-zA-Z: ]+)/); - text = txtonly[1]; - if (text.length == 5) { - text = text + " " - } - if (text.length == 22) { - var arr = text.match(/([a-zA-Z ]+):([a-zA-Z ]+)/); - output = output + "<h3>Proxy request results:</h3>"; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Request headers received from client:</div> <font color="#003399">' + codes[1][arr[1][1]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Result of Traffic Server cache lookup for URL:</div> <font color="#003399">' + codes[2][arr[1][3]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Response information received from origin server:</div> <font color="#003399">' + codes[3][arr[1][5]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Result of document write-to-cache:</div> <font color="#003399">' + codes[4][arr[1][7]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Proxy operation result:</div> <font color="#003399">' + codes[5][arr[1][9]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Error codes (if any):</div> <font color="#003399">' + codes[6][arr[1][11]] + '</font><br/>'; - - output = output + "<h3>Operational results:</h3>"; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Tunnel info:</div> <font color="#003399">' + codes[7][arr[2][1]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Cache-type and cache-lookup cache result values:</div> <font color="#003399">' + codes[8][arr[2][3]] + " / " + codes[9][arr[2][4]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Parent proxy connection status:</div> <font color="#003399">' + codes[10][arr[2][6]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Origin server connection status:</div> <font color="#003399">' + codes[11][arr[2][8]] + '</font><br/>'; - - } else if (text.length == 6) { - output = output + "<h3>Proxy request results:</h3>"; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Result of Traffic Server cache lookup for URL:</div> <font color="#003399">' + codes[2][text[1]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Response information received from origin server:</div> <font color="#003399">' + codes[3][text[3]] + '</font><br/>'; - output = output + '<div style="width: 450px; font-weight: bold; float: left;">Result of document write-to-cache:</div> <font color="#003399">' + codes[4][text[5]] + '</font><br/>'; - - - } else { - output = "Invalid VIA data, must be 22 or 6 characters long."; - } - via.innerHTML = output; - if (form) { - window.location.hash = escape(text); - } - return false; -} - -function checkQuery() { - var url = location.href; - if (url.indexOf("#") > 0) { - var qs = url.substring(url.indexOf("#")+1).replace("%20", " ").replace("+", " "); - if (qs && qs.length > 5) { - showVia(false, qs); - } - } -} -</script> -</head> - <body class="container" onLoad="checkQuery();"> - <!-- Header --> - <div class="row" id="header"> - <div class="fourcol"> - <a href="/"><img class="logo" alt="Apache Traffic Server" src="/images/trans_logo_tm_380x69.png" /></a> - </div> - <div class="fourcol"> - <a href="https://www.apache.org/"><img alt="The Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" /></a> - </div> - <div class="fourcol right last" id="searchbox"> - <form action="https://docs.trafficserver.apache.org/en/latest/search.html" id="cse-search-box" name="cse-search-box"> - <input type="text" name="q" size="22" style="font-size: 80%" /> - <input type="submit" name="sa" value="Search Documentation" style="font-size: 80%" /> - </form> - </div> - </div> - </div> - - <div class="row nav"> - <div class="eightcol"> - <a href="https://trafficserver.apache.org/">Home</a> - <a href="/downloads">Downloads</a> - <a href="https://docs.trafficserver.apache.org/en/latest/index.html">Documentation</a> - <a href="https://cwiki.apache.org/confluence/display/TS/Apache+Traffic+Server">Wiki</a> - <a href="https://github.com/apache/trafficserver/issues">Issues</a> - <a href="/users.html">Customers</a> - <a href="/acknowledgements.html">Acknowledgements</a> - </div> - <div class="fourcol last right"> - <a href="https://apache.org/security/">Security</a> - <a href="https://www.apache.org/foundation/sponsorship.html">Donate</a> - <a href="https://www.apache.org/foundation/thanks.html">Thanks</a> - </div> - </div> - - <div class="row content"> - <div class="twelvecol" style="padding: 10px;"> - <form onsubmit="return showVia(this);"> - <h2>Via header parser</h2> - <b>NOTE: This tool works with ATS 8.0.0 and above for extended via headers. </b> For earlier versions use the command line tool traffic_via.<br> - Enter your Via header into the box below to parse it:<br/> - <input type="text" name="via" id="via" size="20"/><input type="button" onclick="showVia(this.form)" value="Parse header"/> - </form> - - <div id="viaoutput"> - </div> - </div> - </div> - - - <div id="footer" class="row"> - <div class="tencol"> - - Copyright © 2025 - <a href="https://www.apache.org/">The Apache Software Foundation</a>. - Licensed under - the <a href="https://www.apache.org/licenses/">Apache License</a>, - Version 2.0. Apache Traffic Server, Apache, - the Apache Traffic Server logo, and the Apache feather logo are - trademarks of The Apache Software Foundation. - </div> - <div class="twocol right last"> - <span id="apache_logo"> - <a href="https://www.apache.org/"><img alt="The Apache Software Foundation" src="https://www.apache.org/images/feather-small.png" /></a> - </span> - </div> - </div> - -</body> -</html> - diff --git a/content/via.html b/content/via.html new file mode 100644 index 0000000..a633ca7 --- /dev/null +++ b/content/via.html @@ -0,0 +1,317 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Via Header Decoder - Apache Traffic Server</title> + + <link rel="stylesheet" href="/styles/tailwind-complete.css"> + <link rel="stylesheet" href="/styles/custom.css"> + + <script type="text/javascript"> +var codes = {} +codes[1] = {} +codes[1]['title'] = "client-info Request headers received from client. Value is one of:" +codes[1]['I'] = "If Modified Since (IMS)" +codes[1]['C'] = "cookie" +codes[1]['E'] = "error in request" +codes[1]['S'] = "simple request (not conditional)" +codes[1]['N'] = "no-cache" +codes[2] = {} +codes[2]['title'] = "cache-lookup Result of Traffic Server cache lookup for URL. Value is one of:" +codes[2]['A'] = "in cache, not acceptable (a cache \"MISS\")" +codes[2]['H'] = "in cache, fresh (a cache \"HIT\")" +codes[2]['S'] = "in cache, stale (a cache \"MISS\")" +codes[2]['R'] = "in cache, fresh Ram hit (a cache \"HIT\")" +codes[2]['M'] = "miss (a cache \"MISS\")" +codes[2][' '] = "no cache lookup performed" +codes[3] = {} +codes[3]['title'] = "server-info Response information received from origin server. Value is one of:" +codes[3]['E'] = "error in response" +codes[3][' '] = "no server connection needed" +codes[3]['S'] = "served" +codes[3]['N'] = "not-modified" +codes[4] = {} +codes[4]['title'] = "cache-fill Result of document write to cache. Value is one of:" +codes[4]['U'] = "updated old cache copy" +codes[4]['D'] = "cached copy deleted" +codes[4]['W'] = "written into cache (new copy)" +codes[4][' '] = "no cache write performed" +codes[5] = {} +codes[5]['title'] = "proxy-info Proxy operation result. Value is one of:" +codes[5]['R'] = "origin server revalidated" +codes[5][' '] = "unknown?" +codes[5]['S'] = "served" +codes[5]['N'] = "not-modified" +codes[6] = {} +codes[6]['title'] = "error-codes Value is one of:" +codes[6]['A'] = "authorization failure" +codes[6]['H'] = "header syntax unacceptable" +codes[6]['C'] = "connection to server failed" +codes[6]['T'] = "connection timed out" +codes[6]['S'] = "server related error" +codes[6]['D'] = "dns failure" +codes[6]['N'] = "no error" +codes[6]['F'] = "request forbidden" +codes[7] = {} +codes[7]['title'] = "tunnel-info Proxy-only service operation. Value is one of:" +codes[7][' '] = "no tunneling" +codes[7]['U'] = "tunneling because of url (url suggests dynamic content)" +codes[7]['M'] = "tunneling due to a method (e.g. CONNECT)" +codes[7]['O'] = "tunneling because cache is turned off" +codes[7]['F'] = "tunneling due to a header field (such as presence of If-Range header)" +codes[8] = {} +codes[8]['title'] = "cache-type and cache-lookup cache result values (2 characters)" +codes[8]['I'] = "icp" +codes[8][' '] = "cache miss or no cache lookup" +codes[8]['C'] = "cache" +codes[9] = {} +codes[9]['title'] = "cache-lookup-result character value is one of:" +codes[9][' '] = "no cache lookup" +codes[9]['S'] = "cache hit, but expired" +codes[9]['U'] = "cache hit, but client forces revalidate (e.g. Pragma: no-cache)" +codes[9]['D'] = "cache hit, but method forces revalidated (e.g. ftp, not anonymous)" +codes[9]['I'] = "conditional miss (client sent conditional, fresh in cache, returned 412)" +codes[9]['H'] = "cache hit" +codes[9]['M'] = "cache miss (url not in cache)" +codes[9]['C'] = "cache hit, but config forces revalidate" +codes[9]['N'] = "conditional hit (client sent conditional, doc fresh in cache, returned 304)" +codes[10] = {} +codes[10]['title'] = "parent-proxy parent proxy connection status" +codes[10][' '] = "no parent proxy" +codes[10]['S'] = "connection opened successfully" +codes[10]['F'] = "connection open failed" +codes[11] = {} +codes[11]['title'] = "server-conn-info origin server connection status" +codes[11][' '] = "no server connection" +codes[11]['S'] = "connection opened successfully" +codes[11]['F'] = "connection open failed" + +function showVia(form, value) { + var text = value? value : form.via.value; + if (value) { + document.getElementById("via").value = value; + } + var via = document.getElementById("viaoutput") + var output = ""; + var txtonly = text.match(/([a-zA-Z: ]+)/); + text = txtonly[1]; + if (text.length == 5) { + text = text + " " + } + if (text.length == 22) { + var arr = text.match(/([a-zA-Z ]+):([a-zA-Z ]+)/); + output = output + '<h3 class="text-lg font-bold text-primary mt-6 mb-3">Proxy request results:</h3>'; + output = output + '<div class="grid grid-cols-1 gap-2">'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Request headers received from client:</span> <span class="text-accent">' + codes[1][arr[1][1]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Result of Traffic Server cache lookup:</span> <span class="text-accent">' + codes[2][arr[1][3]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Response from origin server:</span> <span class="text-accent">' + codes[3][arr[1][5]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Result of document write-to-cache:</span> <span class="text-accent">' + codes[4][arr[1][7]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Proxy operation result:</span> <span class="text-accent">' + codes[5][arr[1][9]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Error codes (if any):</span> <span class="text-accent">' + codes[6][arr[1][11]] + '</span></div>'; + output = output + '</div>'; + + output = output + '<h3 class="text-lg font-bold text-primary mt-6 mb-3">Operational results:</h3>'; + output = output + '<div class="grid grid-cols-1 gap-2">'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Tunnel info:</span> <span class="text-accent">' + codes[7][arr[2][1]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Cache-type and lookup result:</span> <span class="text-accent">' + codes[8][arr[2][3]] + " / " + codes[9][arr[2][4]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Parent proxy connection status:</span> <span class="text-accent">' + codes[10][arr[2][6]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Origin server connection status:</span> <span class="text-accent">' + codes[11][arr[2][8]] + '</span></div>'; + output = output + '</div>'; + + } else if (text.length == 6) { + output = output + '<h3 class="text-lg font-bold text-primary mt-6 mb-3">Proxy request results:</h3>'; + output = output + '<div class="grid grid-cols-1 gap-2">'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Result of Traffic Server cache lookup:</span> <span class="text-accent">' + codes[2][text[1]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Response from origin server:</span> <span class="text-accent">' + codes[3][text[3]] + '</span></div>'; + output = output + '<div class="flex"><span class="w-80 font-semibold text-gray-700">Result of document write-to-cache:</span> <span class="text-accent">' + codes[4][text[5]] + '</span></div>'; + output = output + '</div>'; + + } else { + output = '<p class="text-red-600 font-medium">Invalid VIA data, must be 22 or 6 characters long.</p>'; + } + via.innerHTML = output; + if (form) { + window.location.hash = escape(text); + } + return false; +} + +function checkQuery() { + var url = location.href; + if (url.indexOf("#") > 0) { + var qs = url.substring(url.indexOf("#")+1).replace("%20", " ").replace("+", " "); + if (qs && qs.length > 5) { + showVia(false, qs); + } + } +} + </script> +</head> +<body class="font-sans text-gray-800 bg-white" onload="checkQuery();"> + <header class="sticky top-0 z-50 bg-white shadow-sm"> + <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> + <div class="flex justify-between items-center py-4"> + <div class="flex items-center"> + <a href="/" class="flex items-center space-x-3"> + <img src="/images/press/ts_logo_tm_380x73.png" alt="Apache Traffic Server" class="h-12 w-auto"> + </a> + </div> + + <nav class="hidden lg:flex items-center space-x-6"> + <a href="/" class="text-gray-700 hover:text-accent transition-colors font-medium">Home</a> + <a href="/downloads.html" class="text-gray-700 hover:text-accent transition-colors font-medium">Downloads</a> + <a href="https://docs.trafficserver.apache.org/en/latest/index.html" class="text-gray-700 hover:text-accent transition-colors font-medium">Documentation</a> + <a href="https://github.com/apache/trafficserver/issues" class="text-gray-700 hover:text-accent transition-colors font-medium">Issues</a> + <a href="https://ci.trafficserver.apache.org/" class="text-gray-700 hover:text-accent transition-colors font-medium">CI</a> + <a href="/users.html" class="text-gray-700 hover:text-accent transition-colors font-medium">Customers</a> + </nav> + + <div class="hidden lg:flex items-center space-x-4"> + <a href="https://www.apache.org/" class="flex items-center"> + <img src="https://www.apache.org/images/feather-small.png" alt="The Apache Software Foundation" class="h-10 w-auto"> + </a> + </div> + + <button id="mobile-menu-button" class="lg:hidden p-2 rounded-md text-gray-700 hover:text-accent hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-accent" aria-label="Toggle menu"> + <svg class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/> + </svg> + </button> + </div> + + <nav id="mobile-menu" class="lg:hidden hidden pb-4 space-y-2"> + <a href="/" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Home</a> + <a href="/downloads.html" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Downloads</a> + <a href="https://docs.trafficserver.apache.org/en/latest/index.html" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Documentation</a> + <a href="https://github.com/apache/trafficserver/issues" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Issues</a> + <a href="https://ci.trafficserver.apache.org/" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">CI</a> + <a href="/users.html" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Customers</a> + <a href="/acknowledgements.html" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Acknowledgements</a> + <a href="/press.html" class="block px-3 py-2 rounded-md text-gray-700 hover:bg-gray-100 hover:text-accent transition-colors font-medium">Press Kit</a> + <a href="/via.html" class="block px-3 py-2 rounded-md bg-blue-50 text-accent font-semibold">Via Decoder</a> + </nav> + </div> + </header> + + <main class="py-12"> + <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"> + <!-- Header --> + <div class="text-center mb-12"> + <h1 class="text-4xl font-bold text-primary mb-4">Via Header Decoder</h1> + <p class="text-xl text-gray-600">Parse and understand Apache Traffic Server Via headers</p> + </div> + + <!-- Tool Card --> + <div class="bg-white rounded-xl shadow-lg border border-gray-200 p-8"> + <form onsubmit="return showVia(this);"> + <div class="mb-6"> + <label for="via" class="block text-sm font-semibold text-gray-700 mb-2">Enter Via Header</label> + <div class="flex gap-4"> + <input type="text" name="via" id="via" + class="flex-1 px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-accent focus:border-accent text-lg font-mono" + placeholder="e.g., uScMsEf pSeN:eC sF"> + <button type="button" onclick="showVia(this.form)" + class="px-6 py-3 bg-gradient-to-r from-blue-500 to-blue-900 text-white font-semibold rounded-lg hover:shadow-lg transition-all"> + Parse Header + </button> + </div> + </div> + + <div class="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-6"> + <p class="text-sm text-blue-800"> + <strong>Note:</strong> This tool works with ATS 8.0.0 and above for extended via headers. + For earlier versions, use the command line tool <code class="bg-blue-100 px-1 rounded">traffic_via</code>. + </p> + </div> + </form> + + <!-- Output --> + <div id="viaoutput" class="mt-6"> + </div> + </div> + + <!-- Reference Section --> + <div class="mt-12"> + <h2 class="text-2xl font-bold text-primary mb-6">Via Header Format Reference</h2> + <div class="bg-gray-50 rounded-xl p-6 border border-gray-200"> + <p class="text-gray-600 mb-4"> + The Via header in Apache Traffic Server encodes information about how the proxy handled the request. + Extended via headers (22 characters) provide detailed information in the format: + </p> + <code class="block bg-gray-800 text-green-400 p-4 rounded-lg font-mono text-sm mb-4"> + [client-info][cache-lookup][server-info][cache-fill][proxy-info][error-codes]:[tunnel][cache-type][cache-result][parent][server] + </code> + <p class="text-gray-600"> + For more details, see the + <a href="https://docs.trafficserver.apache.org/en/latest/appendices/faq.en.html#what-is-the-format-of-the-via-header" + class="text-accent hover:underline">Via Header Documentation</a>. + </p> + </div> + </div> + </div> + </main> + + <!-- Footer --> + <footer class="bg-gray-50 border-t border-gray-200 mt-16"> + <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"> + <div class="grid grid-cols-2 md:grid-cols-4 gap-8"> + <div> + <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">Resources</h3> + <ul class="space-y-3"> + <li><a href="https://docs.trafficserver.apache.org/en/latest/index.html" class="text-secondary hover:text-accent transition-colors">Documentation</a></li> + <li><a href="https://github.com/apache/trafficserver/" class="text-secondary hover:text-accent transition-colors">Source Code</a></li> + </ul> + </div> + + <div> + <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">Community</h3> + <ul class="space-y-3"> + <li><a href="/users.html" class="text-secondary hover:text-accent transition-colors">Customers</a></li> + <li><a href="https://github.com/apache/trafficserver/issues" class="text-secondary hover:text-accent transition-colors">Issues</a></li> + <li><a href="https://the-asf.slack.com/" class="text-secondary hover:text-accent transition-colors">Slack Channel</a></li> + </ul> + </div> + + <div> + <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">Apache</h3> + <ul class="space-y-3"> + <li><a href="https://www.apache.org/" class="text-secondary hover:text-accent transition-colors">Foundation</a></li> + <li><a href="https://www.apache.org/licenses/" class="text-secondary hover:text-accent transition-colors">License</a></li> + <li><a href="https://github.com/apache/trafficserver/security/policy" class="text-secondary hover:text-accent transition-colors">Security</a></li> + <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" class="text-secondary hover:text-accent transition-colors">Privacy</a></li> + <li><a href="https://www.apache.org/events/current-event.html" class="text-secondary hover:text-accent transition-colors">Events</a></li> + <li><a href="https://www.apache.org/foundation/sponsorship.html" class="text-secondary hover:text-accent transition-colors">Donate</a></li> + <li><a href="https://www.apache.org/foundation/thanks.html" class="text-secondary hover:text-accent transition-colors">Thanks</a></li> + </ul> + </div> + + <div> + <h3 class="text-sm font-semibold text-gray-900 uppercase tracking-wider mb-4">More</h3> + <ul class="space-y-3"> + <li><a href="/press.html" class="text-secondary hover:text-accent transition-colors">Press Kit</a></li> + <li><a href="/acknowledgements.html" class="text-secondary hover:text-accent transition-colors">Acknowledgements</a></li> + <li><a href="https://x.com/trafficserver" class="text-secondary hover:text-accent transition-colors">X</a></li> + </ul> + </div> + </div> + + <div class="mt-12 pt-8 border-t border-gray-200 flex flex-col md:flex-row justify-between items-center"> + <p class="text-secondary text-sm text-center md:text-left"> + Copyright © 2025 <a href="https://www.apache.org/" class="hover:text-accent">The Apache Software Foundation</a>. + Licensed under the <a href="https://www.apache.org/licenses/" class="hover:text-accent">Apache License</a>, Version 2.0. + Apache Traffic Server, Apache, the Apache Traffic Server logo, and the Apache feather logo are trademarks of The Apache Software Foundation. + </p> + <div class="mt-4 md:mt-0"> + <a href="https://www.apache.org/" class="inline-block"> + <img src="https://www.apache.org/images/feather-small.png" alt="Apache" class="h-8 w-auto"> + </a> + </div> + </div> + </div> + </footer> + + <script src="/js/menu.js"></script> +</body> +</html> + diff --git a/source/templates/index.template.html b/source/templates/index.template.html index 0ef7b3b..cfbaa5c 100644 --- a/source/templates/index.template.html +++ b/source/templates/index.template.html @@ -279,6 +279,10 @@ To update: <a href="https://docs.trafficserver.apache.org/en/latest/developer-guide/index.en.html" class="text-accent hover:underline font-medium">Developer's Guide</a> <p class="text-gray-600 text-sm mt-1">Developing Apache Traffic Server plug-ins and how the code works</p> </li> + <li> + <a href="/via.html" class="text-accent hover:underline font-medium">Via Header Decoder</a> + <p class="text-gray-600 text-sm mt-1">Parse and understand ATS Via headers for debugging</p> + </li> </ul> </div> </div>
