Click the link. The page will appear. But look carefully at the address bar.
.htm. .html. .shtml. .asp. .php. .cgi. .pl.
These extensions are not random. They are fingerprints. They show exactly how the server behind the screen built the page before it ever reaches the user’s eyes.
Most users ignore this. You shouldn’t. Understanding these differences can reveal how the network really works behind the scenes. This explains why some websites load quickly while others hang. It explains security vulnerabilities. This explains why Microsoft and Linux developers have been waging a silent war for decades.
This is what these letters actually mean.
The Htm vs Html Divide
In the early days of the World Wide Web, everything ran on UNIX. UNIX likes long filenames. It loved .html. This is the standard. Static. Simple.
Then came the PC. Dos. Windows.
These systems follow the 8.3 naming conventions. The name is 8 characters long. 3 for the extension. .html is 4 characters long. It’s too long. The system choked.
So the web adapted. There are two extensions left: .html and .htm.
In the past, you could tell UNIX and Windows servers apart just by looking at their file extensions. Those days are over.
Today, this difference is insignificant. Sites running on UNIX servers can use .htm. Windows servers can provide .html. This is purely the choice of the Webmaster.
For example, HowStuffWorks runs on UNIX and uses .htm. Why? Because the webmaster chose it. The content is static. The file is on disk. The server catches it. Send it to your browser as is. No processing. No thinking. Just read.
Shtml: Preprocessor
.shtml is similar to .html but works differently.
s stands for Server Side Includes (SSI).
The server does nothing for regular .htm or .html pages. It pulls the file. It sends it.
.shtml suspends the server. Check files for special identifiers. It found them. it executes them.
Imagine a website with a header and footer on each page.
If you want to change the logo, you need to edit each static file. Thousands of files.
Use SSI to save the header to a file. The .shtml page contains tags similar to . When the user requests a page, the server fetches the page, adds the header code, and then sends the result.
This makes it easier to update the entire site. Edit the header file. All pages containing SSI will be updated immediately. This is a simple trick. However, you can see that in addition to the storage, the server is also working.
Asp: Microsoft’s flexible beast
.asp stands for Active Server Pages.
This is Microsoft’s answer to dynamic content. Works on a Windows server. This allows developers to embed Visual Basic Scripting Edition (VBScript) or JScript directly into HTML.
Server recognizes .asp. I know I need to run the code before I send anything to the client.
This code can read the database. You can check your username. You can format content based on the logged in user. You get a lot of flexibility.
But this comes at a price.
There is an error in your code. If the VBScript crashes, the page fails. The server returned an error. Users will see a broken page. With static HTML, this never happens. Static files cannot be “destroyed”.
With freedom comes responsibility. ASP pages are powerful. It is also fragile.
Php, Jsp, Perl: open source challengers
Microsoft is not alone. The rest of the network built their own tools.
.php is the most popular ASP replacement.
It used to be short for “personal homepage”. Currently represents only PHP. This is a scripting language designed to be embedded in HTML. It works primarily on Linux servers. It is open source. It’s free.
.jsp stands for JavaServer Pages. This is Java’s answer to ASP. The embed code is Java. Works on a Java-compatible server. It’s heavy. Startup is slow. But it is fixed. It is used by large companies where stability is more important than speed.
.pl stands for PERL.
PERL is an old scripting language. It is famous for its text processing. .pl files are typically scripts that build pages dynamically. You can do anything you can do with ASP. It’s powerful. It is also known for being difficult to read. The syntax is dense. The code looks like a cat walking across the keyboard.
Cgi: Wildcard
.cgi stands for Common Gateway Interface.
This is not a language. It is a protocol.
.cgi files can be created using C++. It is also possible to write in PERL format. It is also possible to write it in Python. It can be created using almost anything that can be compiled or run on a server.
The server detected a .cgi request. Run the executable file. The executable generates the HTML. The server sends this HTML to the client.
On HowStuffWorks, some .cgi files are actually compiled C++ code. It is very fast. Complexity is high.
Why should you care?
Most users don’t care. They just want the page to load.
However, understanding these extensions can help you understand the architecture of the Internet.
Static pages (.htm, .html ) are safe. they are fast. Hosting costs are low.
Dynamic pages (.asp, .php, .jsp, .cgi ) are very flexible. These interact with the database. Customize your content. They are vulnerable to injection attacks.
If you see .shtml, you know your site uses server-side includes. It can be a large website with many pages.
If you see .php, you know the site might be running on Linux. It can be open source software.
If you look at .asp, you’ll see that it’s probably the Microsoft shop.
The network is not a monolith. It’s a patchwork of technologies. The extension is a seam.
Next time you click on a link, look at the end.
What does this extension tell us about the machine waiting on the other side?
Nothing is certain. The Internet blurs these boundaries. A Linux server can serve .htm. Windows servers can provide .php.
The extensions are less about the operating system now. They are about the developer’s preference.
That technology still exists. There is still logic.
But the signal fades. We strive for dynamic delivery regardless of the file name. These differences are becoming historical relics.

























