2009-09-29 22 views
13

Tôi đã tạo một ứng dụng asp.net mẫu và cố gắng lấy dữ liệu từ máy chủ của tôi bằng cách sử dụng httpwebrequest. Nhưng một số lần tôi nhận được lỗi trên. Tôi đã thực hiện một số tìm kiếm trên google nhưng tất cả đều nói rằng bạn nên thêm thuộc tính "<httpWebRequest useUnsafeHeaderParsing="true" />" trong web.config.HttpWebRequestError: Máy chủ đã vi phạm giao thức. Section = ResponseHeader Chi tiết = CR phải được theo sau bởi LF

Thuộc tính này có từ "KHÔNG AN TOÀN", vì vậy tôi quá lo lắng về điều này. Tôi không thể thêm điều này vào cấu hình trang web của tôi. Có tùy chọn nào khác để đọc phản hồi của URL bị xóa của tôi hay không. làm thế nào nó có thể tốt mà không "<httpWebRequest useUnsafeHeaderParsing="true" />"

Cảm ơn trước, Laxmilal Menaria

+0

Tôi đã nhìn thấy một trường hợp khác nhau với các lỗi tương tự - [Imperva của Incapsula] (https://www.incapsula.com/cdn-content-delivery-network/caching.html) cơ chế bộ nhớ đệm cố gắng để bộ nhớ cache một phản ứng cụ thể . vì vậy, thay vì chuyển hướng đến máy chủ thực, * Incapsula * trả lời với cùng một phản hồi, nhưng bằng cách nào đó, các tiêu đề khác một chút và không tuân thủ Windows CR-LF (\ r \ n). – itsho

Trả lời

19

Điều này chắc chắn là một máy chủ problem-- máy chủ không tuân theo đặc tả HTTP và khách hàng NET đang giảm sút này như một Vấn đề tiềm năng "Không an toàn" là tôi nghĩ một chút nhầm lẫn. Không thực sự là một vấn đề an ninh lớn ở đây, chỉ không tuân thủ RFC mà là xấu nhưng tiếc là không hiếm.

Vì vậy, như bạn thấy trong Google, cách để có được xung quanh vấn đề là để áp dụng thay đổi cấu hình sau:

<configuration> 
<system.net> 
    <settings> 
    <httpWebRequest useUnsafeHeaderParsing="true" /> 
    </settings> 
</system.net> 
</configuration> 
+0

Nếu bạn đang tự hỏi nơi để thêm điều này, hãy tìm trong trình khám phá giải pháp cho 'App.config'. –

2

Một cách để gỡ lỗi này (và chắc chắn nó là vi phạm giao thức đang gây ra sự cố), là sử dụng Fiddler (Http Web Proxy) và xem liệu có xảy ra lỗi tương tự hay không. Nếu không (tức là Fiddler đã xử lý vấn đề cho bạn) thì bạn sẽ có thể khắc phục sự cố đó bằng cờ UseUnsafeHeaderParsing.

Nếu bạn đang tìm kiếm một cách để thiết lập giá trị này programatically xem các ví dụ ở đây: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline/

2

Một khả năng khác: khi thực hiện một POST, server trả lời với một 100 tiếp tục một cách không chính xác.

này đã giải quyết được vấn đề đối với tôi:

request.ServicePoint.Expect100Continue = false;

Các vấn đề liên quan