HTTP yanıt başlığında içerik düzenleme kullanımları


127

Bir veritabanından dosya sunarken aşağıdaki asp.net kodunu çok yararlı buldum:

Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);

Bu, kullanıcının dosyayı kullanmaya çalışması yerine, dosyayı bilgisayarına kaydetmesine ve ardından nasıl kullanılacağına karar vermesine olanak tanır.

Content-disposition yanıt başlığıyla başka neler yapılabilir?


23
Dosya adı boşluk veya ASCII olmayan karakterler içeriyorsa örnek kodunuzun bozulacağını unutmayın. Daha fazla bilgi için RFC 6266'ya bakın.
Julian Reschke

@JulianReschke, Yazdırılamaz olarak kabul edilen ASCII karakterleri ne olacak? ( 0to 0x1F)
Pacerier

RFC 6266'yı okuyun (bir dosya adında kullanmanın kötü bir fikir olacağı gerçeği dışında; alıcılar muhtemelen onları atacaklardır)
Julian Reschke

1
Adın etrafında çift tırnak işareti kullanırsanız beyaz boşluk, Unicode vb. Kullanabilirsiniz. kb.mozillazine.org/…
Tony BenBrahim

1
@Ronnie Overby Content Disposition nedir?
divy3993

Yanıtlar:


84

RFC 6266'nın aşağıda belirtilen RFC'lerin yerini aldığını unutmayın . Bölüm 7 , ilgili bazı güvenlik endişelerini özetlemektedir.

İçerik düzenleme başlığındaki yetki, RFC 1806 ve RFC 2183'tür. İnsanlar ayrıca içerik düzenleme korsanlığı tasarladılar . Content-disposition başlığının HTTP 1.1 standardının bir parçası olmadığına dikkat etmek önemlidir.

HTTP 1.1 Standardı ( RFC 2616 ) ayrıca içerik düzenlemesinin olası güvenlik yan etkilerinden de bahseder:

15.5 İçeriğin Elde Edilmesi Sorunları


HTTP'de sıklıkla uygulanan Content-Disposition (bkz. Bölüm 19.5.1) başlığının türetildiği RFC 1806 [35], çok sayıda
ciddi güvenlik hususlarına sahiptir. Content-Disposition,
HTTP standardının bir parçası değildir , ancak geniş çapta uygulandığından, uygulayıcılar
için kullanımını ve risklerini belgeliyoruz. Ayrıntılar için bkz. RFC 2183 [49]
(RFC 1806'yı günceller).


31
Bugünlerde yetkili RFC 6266'dır.
Julian Reschke

@JulianReschke, "yerine geçer" ve "güncellemeler" nasıl çalışır? RFC 7230 gibi daha yeni sürümler de RFC 6266'yı eski hale getiriyor mu?
Pacerier

@Pacerier - RFC 7230 neden RFC 6266'yı etkiler?
Julian Reschke

@Julian, 1) 6266 güncellemesinden beri 2616, 2) 2616 723X tarafından kullanılmaz hale getirildi, 3) O halde 6266 da eskimiş sayılıyor mu?
Pacerier

5
Pekala, RFC 5678 burada, RFC 9876 burada. Content-Disposition hoş karşılanmazsa, bunun yerine ne kullanmalıyız?
Csaba Toth

25

Görünüşe göre Content-Disposition başlığı aslında web için değil, e-posta için oluşturulmuş. ( İlgili RFC'ye bağlantı .)

Web tarayıcılarının yanıt verebileceğini tahmin ediyorum

Response.AppendHeader("content-disposition", "inline; filename=" + fileName);

kaydederken, ama emin değilim.



5

Asp.net kullanıcıları için .NET çerçevesi, bir içerik değerlendirme başlığı oluşturmak için bir sınıf sağlar: System.Net.Mime.ContentDisposition

Temel kullanım:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());

1
Dikkat edin, bu sınıf RFC 6266 ile uyumlu değildir . Parametrede RFC 5987 kodlamasıyla parametre filenamekullanmak yerine UTF-8 base64 kodlaması yapar . Bunu düzeltmek için fx utils türetmenin veya kullanmanın bir yolu yok, neredeyse her şey geçersiz kılınamaz veya dahili ... .Net fx hala açıklığı ve genişletilebilirliği öğrenmede uzun bir yol var. MVC 5.2'de, sınıf biraz daha iyi işliyor , ancak diğer parametreleri filename*FileResultfilenameinline
Frédéric

2

Bu başlık RFC 2183'te tanımlanmıştır , böylece okumaya başlamak için en iyi yer burasıdır.

İzin verilen değerler, İnternet Tahsisli Numaralar Otoritesine (IANA) kayıtlı olanlardır; bunların değer kayıtları kesin kaynak olarak görülmelidir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.