2013-04-24 15 views
13

Próbuję użyć pliku pdf.js z żądaniami zakresu (stopniowe ładowanie dokumentu PDF), ale gdy próbuję załadować pliki pDF z Amazon S3 URL pojawia się ten błąd w konsoli:Odmówił wydania niebezpiecznego nagłówka Błąd "Accept-Ranges" z pliku pdf.js z adresami URL amazon

-Refused uzyskania niebezpieczny nagłówka „Accept zakresów”

i pdf nie ładuje poprzez częściową zawartością 206 (na życzenie), lecz zakres 200 i następnie oglądane w przeglądarce.

ten jest przykładem pdf URL:

https://kotob.s3.amazonaws.com/book.pdf?Signature=irgVfoAZuPPIp5kpCesni2MzpLo%3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA

każda pomoc

Odpowiedz

3

Musisz ustawić

Access-Control-Allow-Headers : Accept-Ranges 
+0

to nie wydaje się być regularne pole nagłówka HTTP. http://en.wikipedia.org/wiki/List_of_HTTP_header_fields –

+0

"Wszystkie nagłówki powiązane z CORS są poprzedzone" Access-Control- "" zgodnie z https://www.html5rocks.com/en/tutorials/cors/#toc- handling-a-simple-request – Stevko

16

Ustawianie politykę CORS na Amazon jak to wydaje się pomóc.

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <!-- this part is critical --> 
     <AllowedHeader>*</AllowedHeader> 
     <ExposeHeader>Accept-Ranges</ExposeHeader> 
     <ExposeHeader>Content-Encoding</ExposeHeader> 
     <ExposeHeader>Content-Length </ExposeHeader> 
     <ExposeHeader>Content-Range</ExposeHeader> 
    </CORSRule> 
</CORSConfiguration> 

Ale po tym, jak umieściłem zasoby na CDN, to nie działa. W każdym razie wydaje się, że jest o wiele szybszy, nawet z 200 na CDN, a następnie z częściowym pobieraniem 206 na S3.

+0

Content-Length jest niepotrzebny, jest automatycznie wyeksponowany –

+2

Próbowałem tej konfiguracji i wielu podobnych konfiguracji bez powodzenia w Webkit. Safari i Chrome nadal chcą rzucić niebezpieczny błąd "Accept-Ranges". – BradGreens

6

Późna odpowiedź, ale z blokami Azure (wiem, że pytasz o AWS, ale to doprowadzało mnie do szału, próbując dowiedzieć się, że tak i tak odpowiada) musisz ustawić Accept-Ranges jako Dozwolony nagłówek, ustawiając go na * nie działa.

Użyłem następujący kod C# to zrobić:

var url = new Uri(String.Format("https://yourblob.blob.core.windows.net")); 
var credentials = new StorageCredentials("accountname", "key"); 
var client = new CloudBlobClient(url, credentials); 

var corsRule = new CorsRule(); 

corsRule.ExposedHeaders.Add("Accept-Ranges"); 
corsRule.ExposedHeaders.Add("Content-Encoding"); 
corsRule.ExposedHeaders.Add("Content-Length"); 
corsRule.ExposedHeaders.Add("Content-Type"); 

corsRule.AllowedHeaders.Add("Accept-Ranges"); 
corsRule.AllowedHeaders.Add("Content-Encoding"); 
corsRule.AllowedHeaders.Add("Content-Length"); 
corsRule.AllowedHeaders.Add("Content-Type"); 

var serviceProperties = CloudBlobClient.GetServiceProperties(); 
serviceProperties.Cors.CorsRules.Clear(); 
serviceProperties.Cors.CorsRules.Add(corsRule); 
client.SetServiceProperties(serviceProperties); 
+1

Dzięki temu zaoszczędziło mi to dużo czasu! – guyfromfargo