Yüzde Kodlama (Percent-Encoding) Nedir ve Neden Gereklidir?
Yüzde kodlama, verilerin internet üzerinden nasıl iletildiğini belirleyen modern web altyapısının temel bir sütunudur. Özünde internet, kaynakları bulmak için Tekdüze Kaynak Tanımlayıcılarına (URI) dayanır. Ancak, URI belirtimi (RFC 3986), bir URL içinde güvenle kullanılabilecek karakterleri kesin olarak sınırlar. 'Ayrılmamış karakterler' olarak bilinen izin verilen karakterler; büyük ve küçük alfasayısal karakterler (A-Z, a-z, 0-9), tire (-), nokta (.), alt çizgi (_) ve tilde (~) ile sınırlıdır. Diğer tüm karakterler 'güvenli olmayan' veya 'ayrılmış' olarak kabul edilir çünkü URL biçiminde özel yapısal anlamlara sahiptirler. Örneğin, ve işareti (&) sorgu parametrelerini ayırmak için kullanılır, eşittir işareti (=) değerleri atar ve taksim işareti (/) dizin yollarını tanımlar. Yapısal bir ayırıcı yerine bir veri yükünün parçası olarak gerçek '&' karakterini iletmeniz gerekiyorsa, bunun yüzde ile kodlanması gerekir.
Bir karakterin yüzde ile kodlanması gerektiğinde, öncelikle UTF-8 karakter kodlama standardına göre karşılık gelen bayt değerine dönüştürülür. Her bayt daha sonra önünde bir yüzde işareti (%) bulunan iki haneli onaltılık bir sayı ile temsil edilir. Örneğin, bir boşluk karakteri ondalık sistemde 32 veya onaltılık sistemde 20 bayt değerine karşılık gelir. Bu nedenle, bir boşluk '%20' haline gelir. 'At' sembolü (@) '%40' ve virgül (,) '%2C' olur. Bu sistematik dönüşüm, web sunucularının, yük dengeleyicilerinin ve tarayıcıların URL'nin sınırlarını herhangi bir belirsizlik veya veri bozulması olmadan evrensel olarak yorumlayabilmesini sağlar. Yüzde kodlaması olmadan, rastgele kullanıcı girdisi içeren karmaşık bir sorgu dizesini geçirmek URL yapısını bozar ve 400 Kötü İstek hatalarına, bozuk bağlantılara veya HTTP Parametre Kirliliği gibi ciddi güvenlik açıklarına yol aııar.
Tarihsel olarak, farklı sistemler URL kodlamasını çeşitli şekillerde ele almıştıır ve bu durum bazen uyumluluk kâbuslarına yol açmıştır. Örneğin, application/x-www-form-urlencoded içerik türü aracılığıyla gönderilen form verileri geleneksel olarak boşlukları artı işareti (+) olarak kodlarken, RFC 3986 kesin olarak '%20'yi zorunlu kılar. Modern web geliştirme çerçeveleri ve dilleri genellikle bu ayrıntıları soyutlar, ancak dizeleri manuel olarak yüzde ile kodlamak için sağlam, güvenilir ve %100 Ücretsiz bir araca sahip olmak; hata ayıklama, API'leri test etme ve karmaşık derin bağlantılar oluşturma için mutlak bir gereklilik olmaya devam etmektedir. Geliştiriciler, yüzde kodlamanın temel mekanizmasınıı anlayarak, uygulamalarının standart ASCII metninden karmaşık çoklu bayt Unicode emojilerine kadar her şeyi etkili bir şekilde yöneterek çeşitli karakter girdilerine karşı dayanıklı olmasını sağlayabilirler.