Just because someone says "don't do that" doesn't mean it can't be done.
Proper use/implementation of HTTP as described in the official specification won't result in data changes triggered by GET requests.
But the people that wrote the spec aren't the code police, so people can write their server code to do whatever they want.
Edit to add:
After all of our prior discussion, I think I'll need to go into real depth to explain this in detail.
TL;DR; - research how network traffic actually works.
To really understand why it is possible to save data using a GET request, you need to know how things work.
We'll start at the lowest hardware layer and work our way up.
Layer 1 - your network card
The purpose of this card is simply to provide a pathway for traffic. That is all it does. It does not do any kind of filtering - that is the job of higher layers. The firmware of a network card doesn't know the first thing about HTTP, so it doesn't care whether the request is GET or not.
Your network card will NOT restrict an HTTP GET request from doing anything.
Layer two - the TCP/IP stack (This is somewhat generalized. There probably more layers to manage some of the communications that I'm not aware of since I'm not a network engineer. And, technically, the TCP/IP stack is two layers.)
TCP and IP started life as software written to the TCP and IP standards. As such, it was quite possible for different software vendors could write their own interpretations, and ignore elements of the standard if they wished (and I wouldn't be surprised if this actually happened as the standard matured). Eventually, the standard became so ubiquitous that it migrated into the firmware of the network cards themselves. At this point, TCP/IP can be considered to be a hardware implementation.
TCP stands for Transport Control Protocol. The job of TCP is to define how data is understood on the network. This is the layer that does the "thinking" to determine whether or not a piece of data is meant for your computer. TCP also knows nothing about HTTP, so it doesn't care about GET requests either.
IP stands for Internet Protocol. It sits atop TCP to help determine which piece of software is responsible for the content being sent via TCP. IP defines the concept of IP Address and port. IP is responsible for delivering the provided data package to the computer specified and the software package which is registered to process exchanges for the given port. This is where the concept of IP Address and Port are introduced and processed.
IP works by wrapping the actual data being sent into a data packet, adding directions (IP address and port, along with a few others) for delivery. The actual content of the package is ignored, as it is not the responsibility of the IP layer.
Note that the HTTP headers are a NOT a part of the IP addressing mechanism - they are part of the content being delivered.
Layer three - software
To process an IP data package, software programs will ask reserve a Port for themselves, telling the IP stack "Send any data coming in on this port directly to me".
ANY software package can reserve ANY port, but only software-to-port binding is a 1:1 deal. One program to one port and one port per program.
The HTTP standard is port 80 - but it is VERY common to use different ports (like 8080) to test websites before deploying them to port 80.
It is, however, entirely possible to use port 80 for a different purpose- you could use it for a Telnet server, an FTP server, a custom protocol - even a DNS server, if you wanted to. The TCP/IP stack DOES NOT CARE what you are doing with the port, it ONLY cares about delivering the data to the "front door".
Since it is possible (and not uncommon) to re-use ports for different things TCP/IP will not do any content filtering. Again, an HTTP GET request WILL NOT be filtered in the TCP/IP stack because it is the responsibility of the software package to process the data that is delivered.
... and now we get to what I've been trying to say all along. People decide what the software they write will do. There are MANY different implementations of HTTP servers (the two "standard" versions are Microsoft and Apache - but if you're not aware of it, look at what the Node.JS community can do by way of HTTP server implementations. There are probably thousands of different custom HTTP server implementations out there now.)
Knowing all of this, I will ask you HOW would it be POSSIBLE to restrict a GET request from adding/changing data? The IP layer looking at the data, based on the port and not allowing a body for GET requests? I can think of two "workarounds" right off the top of my head - add content to the URL or add content to a cookie.
So, to (finally) answer your question: While it is theoretically possible to build a system which would restrict the behavior of all software that behaves as an HTTP server so that it will block any GET request from modifying data - it is a practical impossibility.