2016-01-25 11 views
18

kullanırken XmlHttpRequest tarafından sunucuya gönderilir. Şu anda geliştirdiğim Chrome uzantısından http isteği göndererek garip bir sorunla karşılaştım (normal JavaScript). Bu gibi Url ile (background.js itibaren) XMLHttpRequest ile SONRASI isteği var: Ben de normal bir web sayfasından bu isteği (krom değil uzantısı) göndermekPOST Mutlak URI, Squid3 proxy

http://host.com/postform/upload 

ve önemli bit olduğunu ben Geliştirici açarsanız Araçlar ve benim istek için Ağ sekmesini kontrol orada birinci başlık görüntülenir (çiğ başlıklarını seçerek görüntüler):

POST /postform/upload HTTP/1.1 

ve daha önce çalışıyor Doğrudan bağlantı yerine proxy'yi etkinleştiriyorum. Bunun için Ubuntu'mda kalamar3 kullanıyorum. i kullanmak (

i squid3 dayalı benim proxy ile çalışmak için Chrome'u zorlamak zaman .. proxy kullanarak sadece - Sadece vekil kullanırken bir şey istekleri arasında farklı - ve 404 bulunamadı HTTP sunucusu dönüş yapar Benim chrome uzantısında bunun için PAC betiği) isteğim işe yaramayacak. Birçok kez kontrol ettim ve istek gövdesindeki herhangi bir farkı azaltmak için elimden geleni yaptım ve şu an için bıraktığım tek şey ilk başlık. istek aktif proxy ile gönderildiğinde

O (arka plan sayfasından açıldı Geliştirici Araçları Ağ sekmesi, itibaren) şöyle görünür:

POST http://host.com/postform/upload HTTP/1.1 

Ben chome.webRequest.onBeforeSendHeaders API kullanarak denedim ama Bu yardımcı olmadı. Ayrıca, ana bilgisayar adını XmlHttpRequest.open'daki URL'den kaldırmayı denedim, ancak bu yardımcı olmadı.

Evet, her durumda doğru Host ve Origin başlıklarını gönderiyorum. Bu, squid3 yapılandırmamda bir sorun olabilir mi, yoksa javaScript'imde ne değiştirmeliyim? Gerçekleşen

GÜNCELLEME şimdi bu kalamar hiçbir şekilde sorun değildir ve sorun SONRASI isteği TAM uri içerdiğini (http://...) Yerine "yolu" taşımaktadır. GET güzel çalışıyor. Bu beni öldürüyor.

iframe geçici çözümlerini kullanamıyorum. Benim sorunum nedir?

+0

Proxy kullanırken sunucuda neden 404 hatası olduğunu anlıyorum, ancak normal Chrome web sayfasından (jquery/ajax) ve uzantı arka plan komut dosyasından istek gönderilmediğinde neden herhangi bir şeyin (PAC proxy ile) düzgün çalıştığını anlamıyorum. – Croll

cevap

4

XHR API'sini Chrome uzantınızın içinden kullanmak için, URL'yi "permissions" bildirim özniteliğinde belirterek hedef ana makine için izin istemeniz gerekir. Örneğin, hedef sunucu (XHR isteğini göndermek istediğiniz) http://www.example.org ise, bildiriminiz aşağıdaki kod satırlarını içermelidir.

... 
"permissions" : { 
    "http://www.example.org", 
    ... 
} 

Eğer zaten yapmışsanız, o zaman hata arka taraftaki kısımdadır. Ayrıca, tek bir dize kullanarak birden çok URL'nin eşleşmesine izin vermek için match patterns hakkında bilgi edinin - örneğin, *://www.example.org/*.

+2

Zaten – Croll

+1

@ DmitrjA'mda *: //*.* 'iznim var. Sahip olduğun şey buysa, bu hatalı biçimlendirilmiş bir eşleşme modeli. "*: // */*" ' – Xan

+1

@ Xan' *: // *. Org' tam olarak ihtiyacım olanı yapar. Çözümünüzü denedim ve hiçbir şey değişmedi. GET beklendiği gibi çalışır, başlık "konum" yerine tam istek URI'sini içerdiğinden POST başarısız olur (yol). – Croll