2013-03-24 2 views
5

में सर्वर से प्राप्त कई अलग-अलग सामग्री-विस्थापन शीर्षलेख, मैं सर्वलेट की प्रतिक्रिया में सामग्री-स्वभाव शीर्षलेख सेट करने का प्रयास कर रहा हूं, लेकिन मुझे यह त्रुटि ब्राउज़र में मिलती है। मुझे क्या करना चाहिए?Jasperreports

डुप्लिकेट हेडर सर्वर

सर्वर डुप्लीकेट शीर्षलेख सम्मिलित से प्रतिक्रिया से प्राप्त किया। यह समस्या आम तौर पर गलत कॉन्फ़िगर की गई वेबसाइट या प्रॉक्सी का परिणाम है। केवल वेबसाइट या प्रॉक्सी व्यवस्थापक इस समस्या को ठीक कर सकता है।

त्रुटि 34 9 (नेट :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): एकाधिक विशिष्ट सामग्री-विस्थापन शीर्षलेख प्राप्त हुए। यह को HTTP प्रतिक्रिया विभाजन हमलों के खिलाफ सुरक्षा के लिए अनुमति नहीं है।

यहाँ मेरी सर्वलेट नियंत्रक:

@RequestMapping("/**/paymentOrderReport.pdf") 
public class PaymentOrderReportViewController extends org.springframework.web.servlet.mvc.AbstractController { 

    private PaymentDao paymentDao; 
    private JasperPdfView pdfView; 

    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 

     response.setContentType("application/pdf"); 
     response.setHeader("Content-disposition", "attachment; filename=" + "report.pdf"); 

     PaymentOrderEntity paymentOrderEntity = null; 
     String traceCode = request.getParameter(ParamConstants.TRACE_CODE); 

     if (traceCode != null) { 
      PaymentSheetRequestEntity payRequestEntity = paymentDao.loadByUniqueProperty(PaymentSheetRequestEntity.PROP_TRACE_CODE, 
        traceCode); 
      if (payRequestEntity != null) { 
       paymentOrderEntity = payRequestEntity.getPaymentOrder(); 
      } 
     } 

     if (paymentOrderEntity != null) { 
      List<PaymentOrderEntity> result = new ArrayList<PaymentOrderEntity>(); 
      result.add(paymentOrderEntity); 
      JRDataSource jrDataSource = new JRBeanCollectionDataSource(result); 

      Map<String, Object> model = new HashMap<String, Object>(); 
      model.put("reportData", jrDataSource); 

      return new ModelAndView(pdfView, model); 
     } 
     return null; 
    } 

    public void setPaymentDao(PaymentDao paymentDao) { 
     this.paymentDao = paymentDao; 
    } 

    public void setPdfView(JasperPdfView pdfView) { 
     this.pdfView = pdfView; 
    } 
} 

और JasperPdfView कक्षा:

public class JasperPdfView extends AbstractJasperReportsView { 

    @Override 
    protected void renderReport(JasperPrint populatedReport, Map<String, Object> model, HttpServletResponse response) throws Exception { 
     JRPdfExporter jrPdfExporter = new JRPdfExporter(); 
     if (getConvertedExporterParameters() != null) { 
      jrPdfExporter.setParameters(getConvertedExporterParameters()); 
     } 
     jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, populatedReport); 
     jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream()); 
     jrPdfExporter.exportReport(); 
    } 

} 
+0

उसमें कोई प्रगति है?मुझे एक ही त्रुटि मिल रही है – dgmora

+0

कोई प्रगति? मुझे क्रोम ब्राउज़र में एक ही समस्या का सामना करना पड़ रहा है (अन्य सभी ब्राउज़रों में कोई समस्या नहीं - आईई, एफएफ, सफारी) –

उत्तर

14

जाओ अगर आप फ़ाइल डाउनलोड कर रहे हैं जिसमें फ़ाइल नाम में कॉमा है तो क्रोम ओलॉग इस त्रुटि संदेश को प्रदर्शित कर सकता है। क्या आप वास्तव में सिर्फ "report.pdf" फ़ाइल नाम के रूप में उपयोग कर रहे थे?

HTTP specs सामग्री-डिस्पोजिशन हेडर (जो कि HTTP spec का हिस्सा नहीं है) को पढ़ने के बाद एक अल्पविराम चरित्र शामिल नहीं होना चाहिए, क्योंकि इसे दो अलग-अलग शीर्षकों के लिए विभाजक के रूप में माना जाएगा।

एक ही फ़ील्ड नाम के साथ एकाधिक संदेश-हेडर फ़ील्ड एक संदेश में मौजूद हो सकते हैं यदि केवल और उस हेडर फ़ील्ड के लिए संपूर्ण फ़ील्ड-मान को अल्पविराम से अलग सूची के रूप में परिभाषित किया गया है [यानी, # (मान)]। प्रत्येक हेडर फ़ील्ड को "फ़ील्ड-नेम: फ़ील्ड-वैल्यू" जोड़ी में जोड़ना संभव है, संदेश के अर्थशास्त्र को बदले बिना, प्रत्येक बाद के फील्ड-वैल्यू को पहले से जोड़कर, प्रत्येक को अल्पविराम से अलग किया जाना चाहिए।

इसलिए यदि आपके फ़ाइल नाम रिपोर्ट थे, May2014.pdf तो क्रोम

Content-Disposition: attachment; filename=report,May2014.pdf

दो के रूप में मान एक ही http संदेश शीर्ष लेख

Content-Disposition: attachment; filename=report

Content-Disposition: May2014.pdf

के लिए की व्याख्या

जो मैं n बारी को HTTP response splitting attack के रूप में व्याख्या किया गया है, संभवतः क्योंकि एक HTTP प्रतिक्रिया में वास्तव में कोई भी सामग्री-विस्थापन शीर्षलेख मान नहीं होंगे।

अन्य ब्राउज़र फ़ाइल नाम में अल्पविराम को ध्यान में नहीं लगते हैं।

+1

कोई मेरा फ़ाइल नाम report.pdf नहीं है। – united

संबंधित मुद्दे