Temelde, bir tarayıcı gibi pek göreli bir HTTP isteği olabilir:
GET/HTTP/1.1
Host: localhost:8080
(tabii ki, sunucu dinliyor, göz önüne alındığında localhost portunda 8080). tarafından ayrıştırılır olarak (ham URL'yi Her iki durumda da
GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080
, sen git en http.Request.URL
ne olsun edilmektedir: Eğer erişiyormuş
Şimdi, proxy kullanarak sunucu, vekil mutlak URL kullanabilirsiniz söyledi kütüphane). Aldığınız durumda, URL'ye göreli bir yoldan erişiyorsunuz, dolayısıyla URL nesnesinde Ana Bilgisayar veya Şema eksikliği.
HTTP ana bilgisayarını almak istiyorsanız, http.Request
yapısının Host
özniteliğine erişmek isteyebilirsiniz. Bkz http://golang.org/pkg/http/#Request
Sen netcat
ve uygun şekilde biçimlendirilmiş bir HTTP isteği kullanarak (Eğer yukarıdaki blokları kopyalamak bir sondaki boş bir satır dosyanıza sonra olmadığından emin yapabilirsiniz) doğrulayabilmeniz. Denemek için:
cat my-http-request-file | nc localhost 8080
Ayrıca, sen IsAbs()
yöntemini çağırarak istekte göreli veya mutlak URL almak ister sunucu/işleyicisindeki kontrol edebilir: İlginç
isAbsoluteURL := r.URL.IsAbs()
. Çok detaylı olduğun için teşekkürler. Bununla birlikte, dev sunucusunu kullanırken bu durumun mevcut olmaması biraz garip (geliştirme sunucusunun, isteği doldurmak için bir çeşit ana ortam kurmasını tahmin ediyorum). request.Host iş yaptı ama URL.Scheme kullanmak için dev sunucusu kullanılıyorsa veya kullanılmıyorsa koşullu kontrol etmeliyim. – moraes
Cevabınız için teşekkürler! Bu davranışı nasıl önleyeceğinizi anlatabilir misiniz (URL ayrıştırmada baş ağrısı)? Istemeden bile bulamıyor çünkü Request nesnesinden :(Bu normal mi? –
Bazen botları bu şekilde görebildiğinize dikkat edin (bir sayfa talep ederken tam URL'yi kullanırlar.) – Xeoncross