ฉันได้สร้างโปรแกรมพยายามโพสต์สตริงบนไซต์และฉันได้รับข้อผิดพลาดนี้:
"เซิร์ฟเวอร์ละเมิดโปรโตคอล Section = ResponseStatusLine"
หลังจากบรรทัดของรหัสนี้:
gResponse = (HttpWebResponse)gRequest.GetResponse();
ฉันจะแก้ไขข้อยกเว้นนี้ได้อย่างไร
ฉันได้สร้างโปรแกรมพยายามโพสต์สตริงบนไซต์และฉันได้รับข้อผิดพลาดนี้:
"เซิร์ฟเวอร์ละเมิดโปรโตคอล Section = ResponseStatusLine"
หลังจากบรรทัดของรหัสนี้:
gResponse = (HttpWebResponse)gRequest.GetResponse();
ฉันจะแก้ไขข้อยกเว้นนี้ได้อย่างไร
คำตอบ:
ลองใส่สิ่งนี้ใน app / web.config ของคุณ:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
หากไม่ได้ผลคุณอาจลองตั้งค่าKeepAlive
คุณสมบัติเป็นเท็จ
บางครั้งข้อผิดพลาดนี้เกิดขึ้นเมื่อUserAgent
พารามิเตอร์คำขอว่างเปล่า (ใน github.com api ในกรณีของฉัน)
การตั้งค่าพารามิเตอร์นี้เป็นสตริงที่กำหนดเองไม่ว่างช่วยแก้ปัญหาของฉันได้
WebClient
ที่นี่stackoverflow.com/a/11841680/4795214
HttpClient
add: client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line เพื่อแก้ไข
ผู้กระทำผิดในกรณีของฉันกำลังส่งคืนการNo Content
ตอบสนอง แต่กำหนดเนื้อหาการตอบสนองในเวลาเดียวกัน คำตอบนี้อาจเตือนฉันและคนอื่น ๆไม่ให้NoContent
ตอบสนองด้วยร่างกายอีกต่อไป
พฤติกรรมนี้สอดคล้องกับ10.2.5 204 No Contentของข้อกำหนด HTTPซึ่งระบุว่า:
การตอบกลับ 204 ต้องไม่รวมข้อความ - เนื้อความดังนั้นจึงมักจะสิ้นสุดโดยบรรทัดแรกว่างหลังฟิลด์ส่วนหัว
The server committed a protocol violation. Section=ResponseStatusLine
ข้อผิดพลาดเมื่อใช้ WebApi เพื่อส่งคืนการNoContent()
ตอบกลับที่กำหนดเองซึ่งส่งNo Content
การตอบกลับด้วยเหตุผลที่แปลกประหลาด! เมื่อฉันเอาปัญหานั้นออกไป :)
someContent
จากreturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1
ความเป็นไปได้อื่น: เมื่อทำการ POST เซิร์ฟเวอร์จะตอบสนองด้วยการดำเนินการต่อ 100 ครั้งด้วยวิธีที่ไม่ถูกต้อง
สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้:
request.ServicePoint.Expect100Continue = false;
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันใช้ Skype บนเครื่องในพื้นที่ของฉัน ทันทีที่ฉันปิดข้อยกเว้นนั้นก็หายไป
วิธีหนึ่งในการดีบักสิ่งนี้ (และเพื่อให้แน่ใจว่าเป็นการละเมิดโปรโตคอลที่ทำให้เกิดปัญหา) คือการใช้ Fiddler (Http Web Proxy) และดูว่าเกิดข้อผิดพลาดเดียวกันหรือไม่ หากไม่เป็นเช่นนั้น (เช่น Fiddler จัดการปัญหาให้คุณ) คุณควรจะสามารถแก้ไขได้โดยใช้แฟล็ก UseUnsafeHeaderParsing
หากคุณกำลังมองหาวิธีตั้งค่านี้โดยใช้โปรแกรมดูตัวอย่างได้ที่นี่: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
วิธีแก้ปัญหาจำนวนมากพูดถึงวิธีแก้ปัญหา แต่ไม่เกี่ยวกับสาเหตุที่แท้จริงของข้อผิดพลาด
สาเหตุหนึ่งที่เป็นไปได้ของข้อผิดพลาดนี้คือถ้าเว็บเซิร์ฟเวอร์ใช้การเข้ารหัสอื่นที่ไม่ใช่ASCII
หรือISO-8859-1
เพื่อส่งออกส่วนการตอบสนองส่วนหัว เหตุผลในการใช้ISO-8859-1
คือถ้าResponse-Phrase
มีอักขระละตินแบบขยาย
สาเหตุที่เป็นไปได้อีกประการหนึ่งของข้อผิดพลาดนี้คือถ้าเว็บเซิร์ฟเวอร์ใช้UTF-8
ที่ส่งออกไบต์ - ลำดับ - มาร์กเกอร์ (BOM) ตัวอย่างเช่นค่าคงที่เริ่มต้นจะEncoding.UTF8
ส่งออก BOM และง่ายที่จะลืมสิ่งนี้ หน้าเว็บจะทำงานได้อย่างถูกต้องใน Firefox และ Chrome แต่HttpWebRequest
จะระเบิด :) การแก้ไขอย่างรวดเร็วคือการเปลี่ยนเว็บเซิร์ฟเวอร์ให้ใช้การเข้ารหัส UTF-8 ที่ไม่ส่งออก BOM เช่นnew UTF8Encoding(false)
(ซึ่งใช้ได้ตราบใดที่Response-Phrase
มีอักขระ ASCII เพียงตัวเดียว แต่ควรใช้ASCII
หรือISO-8859-1
สำหรับส่วนหัวแล้วUTF-8
หรือ การเข้ารหัสอื่น ๆ สำหรับการตอบสนอง)
การตั้งค่าคาดว่า 100 ยังคงเป็นเท็จและการลดเวลาว่างของซ็อกเก็ตเป็นสองวินาทีช่วยแก้ปัญหาให้ฉันได้
ServicePointManager.Expect100Continue = false;
ServicePointManager. MaxServicePointIdleTime = 2000;
Skype เป็นสาเหตุหลักของปัญหาของฉัน:
ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณได้ตั้งค่า Visual Studio เพื่อดีบักโปรแกรมประยุกต์บนเว็บที่มีอยู่ซึ่งทำงานใน IIS แทนที่จะเป็นเว็บเซิร์ฟเวอร์การดีบักASP.NET ในตัว โดยค่าเริ่มต้น IIS จะรับฟังคำขอทางเว็บบนพอร์ต 80 ในกรณีนี้แอปพลิเคชันอื่นกำลังรับฟังคำขอบนพอร์ต 80 อยู่แล้วโดยปกติแอปพลิเคชันที่กระทำผิดคือ Skype ซึ่งโดยค่าเริ่มต้นจะรับฟังบนพอร์ต 80 และ 443 เมื่อติดตั้ง Skype ครอบครองพอร์ต 80 อยู่แล้วดังนั้น IIS จึงไม่สามารถเริ่มทำงานได้
ในการแก้ไขปัญหาให้ทำตามขั้นตอน:
Skype -> เครื่องมือ -> ตัวเลือก -> ขั้นสูง -> การเชื่อมต่อ:
ยกเลิกการเลือก "ใช้พอร์ต 80 และ 443 เป็นทางเลือกสำหรับการเชื่อมต่อขาเข้า"
และตามที่ระบุไว้ด้านล่างทำการรีเซ็ต IISเมื่อเสร็จแล้ว
ฉันพยายามเข้าถึง Last.fm Rest API จากหลังพร็อกซีและได้รับข้อผิดพลาดที่มีชื่อเสียงนี้
เซิร์ฟเวอร์ละเมิดโปรโตคอล มาตรา = ResponseStatusLine
หลังจากลองวิธีแก้ปัญหาแล้วมีเพียงสองคนนี้เท่านั้นที่ใช้ได้ผลสำหรับฉัน
HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest;
HttpRequestObj.ProtocolVersion = HttpVersion.Version10;
และ
HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest;
HttpRequestObj.ServicePoint.Expect100Continue = false;
ไม่มีวิธีแก้ปัญหาใดที่ใช้ได้ผลสำหรับฉันดังนั้นฉันจึงต้องใช้ WebClient แทน HttpWebRequest และปัญหาก็ไม่มีอีกแล้ว
ฉันต้องการใช้ CookieContainer ดังนั้นฉันจึงใช้วิธีแก้ปัญหาที่โพสต์โดย Pavel Savara ในหัวข้อนี้ - การใช้ CookieContainer กับคลาส WebClient
เพียงแค่ลบ "ป้องกัน" ออกจากบรรทัดนี้:
ส่วนตัวอ่านอย่างเดียวคอนเทนเนอร์ CookieContainer = ใหม่ CookieContainer ();
สาเหตุที่เป็นไปได้ของปัญหานี้คือการกำหนดค่า Web Proxy Auto Discovery Protocol (WPAD) บนเครือข่าย คำขอ HTTP จะถูกส่งอย่างโปร่งใสไปยังพร็อกซีที่สามารถส่งการตอบกลับที่ไคลเอนต์ไม่ยอมรับหรือไม่ได้กำหนดค่าให้ยอมรับ ก่อนที่จะแฮ็กรหัสของคุณเป็นบิตตรวจสอบว่า WPAD ไม่ได้อยู่ในการเล่นโดยเฉพาะอย่างยิ่งหากสิ่งนี้เพิ่ง "เริ่มเกิดขึ้น" จากสีน้ำเงิน
ปัญหาของฉันคือฉันเรียกhttps
endpoint ด้วยhttp
.
สิ่งแรกที่เราพยายามคือปิดใช้งานการบีบอัดเนื้อหาแบบไดนามิกสำหรับ IIS ซึ่งแก้ไขข้อผิดพลาด แต่ข้อผิดพลาดไม่ได้เกิดจากฝั่งเซิร์ฟเวอร์และมีเพียงไคลเอนต์เดียวเท่านั้นที่ได้รับผลกระทบจากสิ่งนี้
ในฝั่งไคลเอนต์เราถอนการติดตั้งไคลเอนต์ VPN รีเซ็ตการตั้งค่าอินเทอร์เน็ตจากนั้นติดตั้งไคลเอนต์ VPN ใหม่ ข้อผิดพลาดอาจเกิดจากโปรแกรมป้องกันไวรัสรุ่นก่อนหน้าซึ่งมีไฟร์วอลล์ จากนั้นเราเปิดใช้งานการบีบอัดเนื้อหาแบบไดนามิกกลับและตอนนี้ก็ใช้งานได้ดีเหมือนเดิม
เกิดข้อผิดพลาดในแอปพลิเคชันที่กำหนดเองซึ่งเชื่อมต่อกับบริการบนเว็บและที่ TFS
ในกรณีของฉัน IIS ไม่มีสิทธิ์ที่จำเป็นในการเข้าถึงเส้นทาง ASPX ที่เกี่ยวข้อง
ฉันให้สิทธิ์ผู้ใช้ IIS แก่ไดเร็กทอรีที่เกี่ยวข้องและทุกอย่างก็เรียบร้อยดี
ดูรหัสของคุณและค้นหาว่าคุณกำลังตั้งค่าส่วนหัวบางส่วนด้วยค่า NULL หรือค่าว่าง
ฉันเริ่มได้รับข้อผิดพลาดนี้จากบริการ php JSON / REST ของฉัน
ฉันเริ่มได้รับข้อผิดพลาดจากการอัปโหลด POST ที่หายาก relativley หลังจากที่ฉันเพิ่มob_start("ob_gzhandler")
ไปยังสคริปต์ GET php ที่เข้าถึงบ่อยที่สุด
ฉันสามารถใช้ได้ob_start()
และทุกอย่างเรียบร้อยดี