Win'teki YeniliklerHTTP 5.1
Bu konuda WinHTTP sürüm 5.1 ile sürüm 5.0 arasındaki en önemli farklar açıklanmaktadır. Bu farklılıkların çoğu, sürüm 5.0'dan sürüm 5.1'e geçiş yapılan uygulamalarda kod değişiklikleri gerektirir. Sürüm 5.1'deki bazı özellikler yalnızca Windows Server 2003 ve Windows XP Service Pack 2 (SP2) ile başlayarak kullanılabilir; özellikle istemcinin kötü amaçlı Web sunucularına karşı güvenliğini iyileştirmeyle ilgili özellikler.
Önemli
WinHTTP Sürüm 5.1'in yayımlanmasıyla birlikte, WinHTTP 5.0 indirmesi artık kullanılamaz. 1 Ekim 2004 itibarıyla Microsoft, WinHTTP 5.0 SDK indirmesini kaldırmıştır ve sürüm 5.0 için ürün desteğini sonlandırmıştır.
DLL Adı Değişikliği
Yeni WinHTTP 5.1 DLL'sinin adı Winhttp.dll, WinHTTP 5.0 DLL'sinin adı ise Winhttp5.dll.
WinHTTP 5.0 ve 5.1 aynı sistemde birlikte bulunabilir; WinHTTP 5.1, WinHTTP 5.0'ın yerini almaz veya üzerine yüklenmez.
Yeniden Dağıtım
WinHTTP 5.1 yalnızca Windows Server 2003, Windows 2000 Professional Service Pack 3 (SP3), Windows XP Service Pack 1 (SP1) ve sonraki işletim sistemleriyle kullanılabilir. WinHTTP 5.1 için yeniden dağıtılabilir birleştirme modülü (.msm) dosyası kullanılamaz.
WinHttpRequest ProgID
WinHttpRequest bileşeninin ProgID değeri "WinHttp.WinHttpRequest.5" olan "WinHttp.WinHttpRequest.5.1" olarak değiştirildi. WinHttpRequest sınıfının CLSID'i de değişti.
Asenkron Callback Çalışma Biçimi Değişikliği
WinHttpWriteData, WinHttpQueryDataAvailable ve WinHttpReadData işlevlerini zaman uyumsuz modda çağırırken, lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailableve lpdwNumberOfBytesRead OUT parametrelerinin ayarlanmasına güvenmeyin. İşlev çağrısı zaman uyumsuz olarak tamamlanırsa, WinHTTP uygulama kodu tarafından sağlanan bu işaretçilere yazmaz. Bunun yerine, uygulamanın bu değerleri geri çağırma işlevi için lpvStatusInformation ve dwStatusInformationLength parametrelerini kullanarak alması gerekir.
Varsayılan Ayarlarda Yapılan Değişiklikler
Varsayılan ayarlarda yapılan değişiklikler şunlardır:
- SSL sunucusu sertifika doğrulaması WinHTTP 5.1'de varsayılan olarak etkindir. WinHTTP 5.0, sunucu sertifikasını doğrularken karşılaşılan hataları ölümcül hatalar olarak işlemez; bu hatalar SECURE_FAILURE geri çağırma bildirimi kullanılarak uygulamaya bildirilir, ancak isteğin iptal edilmesine neden olmaz. WinHTTP 5.1 alternatif olarak, sunucu sertifikası doğrulama hatalarını isteği durduran önemli hatalar olarak işler. Uygulama, WINHTTP_OPTION_SECURITY_FLAGS seçeneğini kullanarak WinHTTP'ya bilinmeyen CA, geçersiz/süresi dolmuş sertifika tarihi veya geçersiz sertifika konu adı gibi sertifika hatalarının küçük bir alt kümesini yoksaymasını bildirir.
- Passport kimlik doğrulama desteği WinHTTP 5.1'de varsayılan olarak devre dışıdır. Passport desteği WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH seçeneğiyle etkinleştirilebilir. Anahtarlık'ta otomatik Passport kimlik bilgisi arama özelliği de varsayılan olarak devre dışıdır.
- HTTP üzerinden güvenli https: URL'sinden normal http: URL'sine yapılan yönlendirmeler, güvenlik nedenleriyle artık varsayılan olarak otomatik şekilde takip edilmemektedir. WinHTTP 5.1'de varsayılan yeniden yönlendirme davranışını geçersiz kılmak için WINHTTP_OPTION_REDIRECT_POLICYyeni bir seçenek vardır. WinHttpRequest COM bileşeniyle, https: 'den http: URL'lere yönlendirmeleri etkinleştirmek için yeni WinHttpRequestOption_EnableHttpsToHttpRedirects seçeneğini kullanın.
- WinHTTP izleme dosyası oluşturulduğunda erişim, yalnızca yöneticilerin dosyayı okuyabileceği veya yazabileceği bir ACL ile kısıtlanır. İzleme dosyasının oluşturulduğu kullanıcı hesabı, başkalarına erişim vermek için ACL'yi de değiştirebilir. Bu koruma yalnızca güvenliği destekleyen dosya sistemlerinde kullanılabilir; yani, NTFS, FAT32 değil).
- Windows Server 2003 ve SP2 ile Windows XP'den başlayarak http olmayan şu iyi bilinen bağlantı noktalarına istek göndermek güvenlik nedeniyle kısıtlanmıştır: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
- Windows Server 2003 ve SP2 ile Windows XP'den başlayarak, WinHTTP'nin HTTP yanıtında kabul ettiği üst bilgi verisi miktarı varsayılan olarak 64K'dır. Sunucu HTTP yanıtı, toplam üst bilgi verisi 64K'dan fazlaysa, WinHTTP isteği ERROR_WINHTTP_INVALID_SERVER_RESPONSE hatasıyla başarısız olur. Bu 64K sınırı, yeni WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE seçeneği kullanılarak geçersiz kılınabilir.
IPv6 Desteği
WinHTTP 5.1, İnternet Protokolü Sürüm 6 (IPv6) için destek ekler. WinHTTP, DNS adı bir IPv6 adresine çözümlenen bir sunucuya HTTP istekleri gönderebilir. Windows Server 2003 ve Windows XP SP2 sürümünden itibaren, WinHTTP ayrıca IPv6 literal adreslerini de desteklemektedir.
WinHTTP için C/C++ API'deki Yeni Seçenekler
WinHTTP 5.1 aşağıdaki yeni seçenekleri uygular:
- "\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"
Windows Server 2003 ve WINDOWS XP SP2'den başlayarak, WinHTTP 5.1 aşağıdaki yeni seçenekleri uygular. Ancak SP3 yüklü Windows 2000 Professional veya SP1 yüklü Windows XP'de, şu seçenek kimlikleriyle WinHttpSetOptionveya WinHttpQueryOptionçağrıları başarısız olur:
- "\#define WINHTTP\_OPTION\_RECEIVE\_RESPONSE\_TIMEOUT 7" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_AUTOMATIC\_REDIRECTS 89" "\#define WINHTTP\_OPTION\_MAX\_HTTP\\_STATUS\_CONTINUE 90" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_HEADER\_SIZE 91" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_DRAIN\_SIZE 92"
WinHttpRequest 5.1 Bileşenindeki Yeni Seçenekler
WinHttpRequest 5.1 bileşeni aşağıdaki yeni seçenekleri uygular:
- "WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"
Aşağıdaki yeni WinHttpRequest 5.1 seçenekleri Windows Server 2003 ve WINDOWS XP SP2 ile başlayarak kullanılabilir:
- "WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"
Otomatik Oturum Açma Güvenliği Yüksek Olarak Ayarlandığında Proxy'lere Güvenilmez
WinHTTP 5.0'da proxy sunucular otomatik giriş için her zaman güvenilirdir. Bu, WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH ilke seçeneği ayarlandığında Windows Server 2003 ve Windows XP SP2 üzerinde çalışan WinHTTP 5.1 için artık geçerli değildir.
Web Proxy Otomatik Bulma (AutoProxy) API'si
WinHTTP tabanlı uygulamalarda ara sunucu ayarlarının yapılandırılmasını kolaylaştırmak için WinHTTP artık Web Proxy Otomatik Bulma (WPAD) protokolünü, otoproksiolarak da adlandırılan, uygular. Bu, Internet Explorer gibi web tarayıcılarının, bir son kullanıcının proxy sunucusunu el ile belirtmesine gerek kalmadan proxy yapılandırmasını otomatik olarak bulmak için uyguladığı protokolle aynıdır. tr-TR: Otoproksi desteklemek için WinHTTP 5.1, WinHttpGetProxyForUrlyeni bir C/C++ işlevinin yanı sıra WinHttpDetectAutoProxyConfigUrl ve WinHttpGetIEProxyConfigForCurrentUseriki destekleyici işlev uygular.
Bilinen Sorunlar
Aşağıdaki sorunların Windows 2000 Professional SP3 ve Windows XP SP1 üzerinde WinHTTP 5.1'de mevcut olduğu bilinmektedir. Bu sorunlar Windows Server 2003 ve WINDOWS XP SP2 ile başlayarak WinHTTP için çözülür:
- Uygulama, WinHttpRequest bileşeni üzerinde WinHttpSetTimeouts işlevi veya SetTimeouts yöntemini kullanarak dwResolveTimeout parametresi gibi sonsuz olmayan bir DNS çözümleme zaman aşımı ayarlarsa, WinHTTP her DNS adını çözdüğünde bir iş parçacığı tanıtıcı sızıntısı meydana gelir. Çok sayıda HTTP isteğinde bu önemli bir bellek sızıntısına neden olur. Geçici çözüm, varsayılan sonsuz çözüm zaman aşımı ayarını değiştirmeden bırakmaktır (0 değeri sonsuz zaman aşımını belirtir). Her durumda, WinHTTP'da DNS ad çözümlemelerinde zaman aşımlarını desteklemek performans açısından pahalı olduğundan bu kesinlikle önerilir. Windows 2000 ve sonraki sürümlerde, temel alınan DNS istemci hizmeti kendi çözüm zaman aşımını uyguladığından WinHTTP'de DNS çözümleme zaman aşımının ayarlanması gereksizdir.
- Asenkron istekleri işlerken WinHTTP, iş parçacığı kimliğine bürünme işlemini düzgün şekilde işlemez. Bu, NTLM/Negotiate kimlik doğrulaması gerektiren isteklerin, kimlik bilgileri WinHttpSetCredentials veya WinHttpSetOption işlevleri kullanılarak açıkça verilmediği sürece başarısız olmasına neden olur.