วิธีค้นหาและเอาชนะ BOM - ข้อผิดพลาดอันไม่พึงประสงค์ใน WordPress การแก้ไขข้อผิดพลาด: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวได้ส่งไปแล้วโดยคำอธิบายของปัญหาเฉพาะ

วันนี้เราตัดสินใจที่จะพูดคุยเกี่ยวกับความหมายของข้อความ "คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวที่ส่งไปแล้ว (เริ่มต้นที่ /home/..."ปรากฏบนหน้าเว็บไซต์แทนที่จะเป็นเนื้อหาหลัก
เมื่อปรากฎว่ามีการเขียนหัวข้อนี้บนอินเทอร์เน็ตเพียงพอ แต่ไม่มีคำแนะนำทั่วไปเกี่ยวกับความหมายทั้งหมดและวิธีกำจัดมัน
เราตัดสินใจที่จะเพิ่มข้อมูลจำนวนมหาศาลในหัวข้อนี้สองสามหยดเนื่องจากเราประสบปัญหานี้เป็นการส่วนตัว

เมื่อไม่นานมานี้ เราได้ย้ายเว็บไซต์ลูกค้าหลายแห่งจากโฮสติ้งหนึ่งไปยังอีกโฮสติ้งหนึ่ง
ทุกอย่างเป็นไปด้วยดี สามารถเข้าถึงเว็บไซต์ต่างๆ ได้ แต่เมื่อฉันพยายามเข้าสู่ระบบของผู้ดูแลระบบ แผงหลังจากเข้าสู่ระบบและรหัสผ่านแล้ว หน้าสีขาวปรากฏขึ้นแทนแผงควบคุม
เราตรวจสอบจากไซต์อื่นแล้ว - สิ่งเดียวกัน
เพื่อจะได้รู้ว่า เหตุผลที่เป็นไปได้เราได้เปิดใช้งานการแสดงข้อผิดพลาดแล้ว
ในการดำเนินการนี้ คุณต้องแก้ไขไฟล์ .htaccess ที่อยู่ในรูทของไซต์ผ่าน FTP โดยเพิ่มบรรทัดเข้าไป:

เปิด Php_flag display_errors

หลังจากนั้นเมื่อเข้าสู่แผงผู้ดูแลระบบข้อความหลายข้อความปรากฏขึ้นเช่น "คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวที่ส่งไปแล้ว (เอาต์พุตเริ่มต้นที่ /home/.../functions.php:1552) ใน /home/.../ public_html /wp-login.php ออนไลน์ 362” ฯลฯ

จากการค้นหาข้อมูลพบว่าข้อความนี้แจ้งเตือนว่าข้อมูลส่วนหัวไม่สามารถเปลี่ยนแปลงได้เนื่องจากส่วนหัว (ข้อมูลเกี่ยวกับพวกเขา) ถูกส่งไปก่อนหน้านี้แล้วในวงเล็บจะระบุว่าบรรทัดใดที่ไฟล์นี้เสร็จสิ้น .


หัวเรื่อง (ส่วนหัว) คือข้อมูลการบริการของเซิร์ฟเวอร์ที่ไซต์นั้นตั้งอยู่ ก่อนที่เบราว์เซอร์จะแสดงเนื้อหาของไซต์ เบราว์เซอร์จะได้รับส่วนหัวจากเซิร์ฟเวอร์ซึ่งระบุข้อมูลต่างๆ: ไม่ว่าจะเปิดใช้งานการแคชหน้าหรือไม่ การเข้ารหัส ประเภทเนื้อหาของหน้า และอื่นๆ ในระบบการจัดการเนื้อหาไซต์ ส่วนหัวจะถูกสร้างขึ้นโดยฟังก์ชันที่อยู่ในนั้น ไฟล์ต่างๆระบบ
เงื่อนไขที่จำเป็น- ส่วนหัวจะต้องส่งก่อนเนื้อหาหลัก (เนื้อหา) ของหน้า


หากเนื้อหาของไซต์ถูกส่งก่อนส่วนหัว สถานการณ์จะเกิดขึ้นซึ่งข้อความ "คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวส่งแล้วโดย ... " เตือนเรา

สิ่งนี้อาจเกิดขึ้นในสถานการณ์ใดบ้าง? ดังที่ได้กล่าวไปแล้ว ใน CMS สมัยใหม่ ส่วนหัวเป็นผลมาจากฟังก์ชันตั้งแต่หนึ่งฟังก์ชันขึ้นไป ฟังก์ชั่นนั้นเป็นส่วนหนึ่งของโค้ดบางส่วนที่อยู่ระหว่างค่าเริ่มต้น และสุดท้าย ?> แท็ก

สิ่งใดก็ตามที่อยู่นอกแท็กเหล่านี้ถือเป็นเนื้อหาของหน้า
ดังนั้นหากมีฟังก์ชันที่จุดเริ่มต้นของหน้าซึ่งผลลัพธ์จะถูกส่งส่วนหัวและเราได้รับข้อความ "คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ ... " ปรากฎว่ามีข้อมูลบางอย่างที่เกี่ยวข้องกับเนื้อหาของ เพจถูกส่งจากเซิร์ฟเวอร์ก่อนส่วนหัว

ข้อมูลนี้คืออะไรและจะค้นหาได้อย่างไร ส่วนใหญ่มักเป็นช่องว่างและบรรทัดว่าง

อวกาศหรือ สตริงว่างถูกตีความว่าเป็นอักขระในเนื้อหาหลักของหน้า ปรากฎว่าเนื้อหาหลักบางส่วนมาก่อนส่วนหัวและถูกส่งไปยังเบราว์เซอร์ก่อน

คุณต้องดาวน์โหลดไฟล์ที่ระบุในข้อความ “คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัว...” ได้ คอมพิวเตอร์ท้องถิ่นเปิดในตัวแก้ไขโค้ด (ฉันใช้ NotePad++) และตรวจสอบบรรทัดว่างและช่องว่างอย่างระมัดระวัง:

อย่างไรก็ตาม มีคุณลักษณะสำคัญประการหนึ่งที่สามารถเพิ่มเวลาที่ใช้ในการค้นหาวิธีแก้ไขได้อย่างมาก
ไฟล์ต้องไม่มีบรรทัดว่างหรือช่องว่าง แต่หากบันทึกด้วยการเข้ารหัส UTF-8 ตัวแก้ไขที่สร้างไฟล์อาจแทรกอักขระที่ไม่เกี่ยวข้องที่จุดเริ่มต้นของเอกสาร อักขระนี้เป็นตัวระบุ UTF-8 เท่ากับช่องว่างความกว้างเป็นศูนย์ซึ่งอาจไม่สามารถแสดงได้เลยในตัวแก้ไข แต่บนเซิร์ฟเวอร์จะถูกมองว่าเป็นเนื้อหาหลักและแสดงก่อนส่วนหัว

หากต้องการกำจัดตัวระบุนี้ คุณต้องบันทึกไฟล์ที่ดาวน์โหลดในรูปแบบใหม่ UTF-8 ที่ไม่มี BOM(UTF-8 โดยไม่มี BOM)

NotePad++ รับมือกับงานนี้ได้อย่างสมบูรณ์แบบ

หลังจากดำเนินการและอัปเดตไฟล์บนเซิร์ฟเวอร์แล้ว ข้อความจะหายไปและไซต์จะทำงานได้ตามปกติ

ในบทความนี้ เราจะดูสาเหตุหลักและวิธีแก้ไขข้อผิดพลาด “ไม่สามารถเปลี่ยนส่วนหัวได้เนื่องจากได้ส่งไปแล้ว” ("ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวได้ส่งไปแล้ว").

ข้อผิดพลาดนี้หมายความว่าอย่างไร

เพื่อทำความเข้าใจสาเหตุของข้อผิดพลาด คุณต้องเข้าใจก่อนว่า "ส่วนหัว" เหล่านี้คืออะไร

อย่าไปเจาะลึกถึงทฤษฎี สมมติว่าก่อนที่ผู้ใช้จะเปิดหน้าเว็บ "ส่วนหัว" เดียวกันนี้จะถูกส่งไปยังเขา ซึ่งประกอบด้วยการเข้ารหัส ภาษาของไซต์ ข้อมูลเซิร์ฟเวอร์ ฯลฯ ข้อมูลอย่างเป็นทางการ- นอกจากนี้ยังควรเพิ่มแยกต่างหากว่าคุกกี้และเซสชันจะถูกส่งไปที่ส่วนหัวด้วย

คำสั่งใดที่ทำให้เกิดข้อผิดพลาดนี้

ข้อผิดพลาด "ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวที่ส่งไปแล้ว"สามารถเรียกคำสั่ง PHP เช่น header , setcookie และอื่นๆ ที่เกี่ยวข้องกับการทำงานของคุกกี้หรือเซสชันได้

เหตุผลและแนวทางแก้ไขสำหรับข้อผิดพลาด

มากที่สุด ข้อผิดพลาดทั่วไปเกิดขึ้นเพราะขาดประสบการณ์ เราทราบแล้วว่าส่วนหัวถูกส่งก่อนที่หน้าเว็บจะเริ่มโหลด

แต่โปรแกรมเมอร์โดยเฉพาะมือใหม่มักลืมหรือไม่รู้เรื่องนี้ด้วยซ้ำ ก่อนอื่นพวกเขาพยายามแสดงบางสิ่งบนเพจ - ส่วนใหญ่มักใช้คำสั่ง echo จากนั้นพวกเขาก็ตั้งค่าคุกกี้ ส่งส่วนหัว ฯลฯ ซึ่งนำไปสู่ข้อผิดพลาดนี้อย่างแน่นอน

นี่คือตัวอย่างโค้ดที่อาจส่งผลให้เกิดข้อผิดพลาดนี้:

นี่คือตัวเลือกที่ถูกต้อง:

นั่นคือ ประการแรก คุณไม่สามารถแสดงสิ่งใดๆ ก่อนที่จะส่งส่วนหัวได้!

อาจไม่ชัดเจนเสมอไป แต่มีข้อผิดพลาดที่มีความแตกต่างเล็กน้อย นี่คือเวลาที่เอกสาร PHP ของคุณขึ้นต้นด้วยช่องว่างหรือบรรทัดว่าง ซึ่งหมายความว่าบรรทัดเหล่านี้จะแสดงในเบราว์เซอร์

สิ่งนี้อาจเป็นเรื่องยากมากที่จะตรวจสอบ เนื่องจากตัวอย่างเช่น แผ่นจดบันทึกของ Windows สามารถเพิ่ม Byte Order Mark ที่จุดเริ่มต้น โดยไม่ต้องเตือนเราในทางใดทางหนึ่ง หรือแม้แต่แสดงสัญลักษณ์นี้ ในกรณีนี้ คุณควรเปิดเอกสารโดยใช้โปรแกรมแก้ไขอื่นและตรวจสอบ

นี่คือตัวอย่างการตั้งค่าส่วนหัวไม่ถูกต้อง:

นั่นคือประการที่สองก่อน

คุณควรระมัดระวังเป็นพิเศษหากคุณใช้คำสั่ง include โดยพื้นฐานแล้วจะเป็นการรวมไฟล์ทั้งหมดและสร้างไฟล์ผลลัพธ์ขึ้นมา และหากคุณรวมส่วนหัวของไซต์ (แถบเลื่อน เมนู ฯลฯ) ไว้ในตอนแรก แล้วลองส่งส่วนหัวในไฟล์หลัก แล้วคุณล่ะ แน่นอน คุณจะได้รับข้อผิดพลาดนี้

นี่คือตัวอย่างของรหัสที่ไม่ถูกต้องดังกล่าว:

ส่งมาโดย เมื่อ พฤหัสบดี 05/04/2017 - 12:55

คำอธิบายของปัญหาเฉพาะ

หลังจากคลิกปุ่มแล้วเกิดข้อผิดพลาด:

คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัว - ส่วนหัวส่งแล้วโดย (เอาต์พุตเริ่มต้นที่ C:\OpenServer\domains\testsite\WEB\5_phpRedirect.php:10) ใน C:\OpenServer\domains\testsite\WEB\5_phpRedirect.php ออนไลน์ 12

รหัสคล้ายกับที่ให้ไว้ในหัวข้อนี้:

เว็บทดลอง

เลือกสคริปต์ที่จะดาวน์โหลด

สคริปต์ตัวจัดการ:

สิ่งนี้จะเกิดขึ้นเมื่อใด

ประเภทข้อผิดพลาด (คำเตือน):

คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัวได้ - ส่วนหัวที่ส่งไปแล้ว

เกิดขึ้นหากคุณได้ทำบางสิ่งที่ต้องตั้งค่าส่วนหัวของเบราว์เซอร์แล้ว และตอนนี้คุณต้องการเขียนใหม่ด้วยส่วนหัวใหม่ ตัวอย่างเช่น หากคุณได้แสดงข้อความแล้ว php จะตั้งค่าส่วนหัว (โดยเฉพาะ header ที่ตั้ง-- ซึ่งแสดงว่าจะยังคงอยู่ในหน้าที่ร้องขอหรือไม่ หรือคุณจำเป็นต้องไปที่หน้าอื่นและรับการตอบกลับคำขอที่นั่น) เพื่อแสดงวิธีปฏิบัติตนแก่เบราว์เซอร์ของลูกค้า (ในการตอบสนอง)

ต้นตอของปัญหา

เป็นไปได้มากว่าปัญหาในกรณีของคุณคือคุณกำลังให้บริการเนื้อหาอยู่แล้ว (แท็ก html ที่ปะปนอยู่ในไฟล์พร้อมกับสคริปต์) ถึงคำสั่ง:

ส่วนหัวของ Echo ($ เปลี่ยนเส้นทาง);

โปรดจำไว้ว่าฟังก์ชัน header() สามารถเรียกได้หากไคลเอนต์เท่านั้น ยังไม่มีการถ่ายโอนข้อมูล- นั่นคือควรมาก่อนในเอาต์พุต ไม่ควรมีแท็ก HTML บรรทัดว่าง ฯลฯ ก่อนที่จะเรียกใช้ บ่อยครั้งข้อผิดพลาดเกิดขึ้นเมื่อเมื่ออ่านโค้ดที่มีฟังก์ชันไฟล์ เช่น include หรือ need มีช่องว่างหรือบรรทัดว่างในโค้ดนี้ที่พิมพ์ก่อนที่จะเรียกใช้ header() ปัญหาเดียวกันนี้อาจเกิดขึ้นได้เมื่อใช้ไฟล์ PHP/HTML ไฟล์เดียว

นั่นคือจำเป็นต้องกำจัดตัวจัดการสคริปต์ของ html - ท้ายที่สุดแล้วมันไม่ได้ส่งออกอะไรเลย แต่เพียงโอนไปยังที่อยู่อื่น - นี่เป็นครั้งแรก.

ส่วนหัว($เปลี่ยนเส้นทาง);

ส่วนหัวของ Echo ($ เปลี่ยนเส้นทาง);

การทดลอง

เนื่องจากโดยทั่วไปแล้ว echo() จะเขียนถึง เนื้อหาการตอบสนอง httpและไม่ได้อยู่ในส่วนหัวและส่วนหัวส่งคืนโมฆะ (นั่นคือไม่ส่งคืนค่า) ดังที่ได้กล่าวไว้ข้างต้นจึงไม่มีประโยชน์ในการใช้ echo() แต่
- อย่างไรก็ตาม ฉันเสนอให้ทำการทดลอง:

  1. ลบ html
  2. อย่าลบเสียงสะท้อน

เนื่องจาก header() ถูกเรียกเป็นหลักก่อน echo() (เนื่องจาก header() เป็นอาร์กิวเมนต์ของ echo()) และดังนั้นจึงส่งคืน - ในเวลาเดียวกันเราจะตรวจสอบว่าฟังก์ชันส่งคืนค่า null หรือไม่ - จะถูกตีความว่าเป็นสตริงว่างหรือ (ซึ่งหรือมากกว่านั้น) echo จะไม่เริ่มทำงานด้วยซ้ำเมื่อการเปลี่ยนเส้นทางเกิดขึ้นแล้ว

มาชี้แจงเหตุผลกันอีกครั้ง

เหล่านั้น. ก่อนที่จะเรียก header() ไม่ควรแสดงเนื้อหา(สิ่งที่เขียนเกี่ยวกับคำอธิบายของฟังก์ชั่น: http://php.net/manual/ru/function.header...)

  • 1) ไม่มีเสียงสะท้อน
  • 2) ไม่ใช่เพียงการทิ้งข้อความ html ลงในเบราว์เซอร์

ในกรณีของเรา เห็นได้ชัดว่า echo ไม่มีผลกระทบใดๆ แต่ html ในตัวจัดการมีผลจริงๆ

ปัญหาได้รับการแก้ไขแล้ว

ตามคำแนะนำของคุณ พวกเขาถูกลบออก แท็ก HTML- ขณะนี้การเปลี่ยนเส้นทางเกิดขึ้นอย่างถูกต้อง สคริปต์ตัวจัดการจะมีลักษณะดังนี้:

ฟังก์ชัน echo ไม่ส่งผลต่อการทำงานจริงๆ เช่น คุณสามารถปล่อยให้มันเป็นเหมือนใน S. Holzner:

นอกจากนี้ เมื่อเขียนโค้ดสำหรับการเปลี่ยนเส้นทาง คุณควรใส่ใจกับนามสกุลของไฟล์ที่ทำการเปลี่ยนแปลง: ด้วยไวยากรณ์ที่เสนอ จะต้องระบุในอาร์กิวเมนต์ส่วนหัว

  • เข้าสู่ระบบเพื่อแสดงความคิดเห็น

แต่คุณสามารถทำให้มันใช้งานได้

แต่คุณยังสามารถทำให้ตัวจัดการก่อนหน้านี้ทำงานได้

การเปลี่ยนเส้นทางผู้ใช้

หากคุณตั้งค่าตัวเลือกในไฟล์ php.ini

เอาท์พุต_บัฟเฟอร์ = 4096

  • เข้าสู่ระบบเพื่อแสดงความคิดเห็น

ห้ามส่งส่วนหัวซ้ำ โปรโตคอล HTTP ใช้งานไม่ได้! แต่เราควรทำอย่างไร? หลังจากแสดงบนเพจแล้ว คุณต้องเริ่มเซสชันและตั้งค่าคุกกี้ด้วยหรือไม่ - มาจำเกี่ยวกับการบัฟเฟอร์เอาต์พุตกันดีกว่า

นั่นคือ เมื่อตั้งค่าขนาดบัฟเฟอร์ที่ไม่เป็นศูนย์ ก็ยังคงสามารถจัดการส่วนหัวได้จนกว่าจะเต็ม หากขนาดบัฟเฟอร์เป็นศูนย์ หลังจากที่เนื้อหาถูกเอาต์พุตแล้ว ก็จะถูกส่งกลับทันที นำหน้าด้วยส่งส่วนหัวการตอบสนอง HTTP ไปยังไคลเอนต์

และปรากฎว่าเราต้องการเปลี่ยนส่วนหัวที่ "บิน" ผ่านเครือข่ายไปยังไคลเอนต์แล้ว (ซึ่งหมายความว่าไม่สามารถแก้ไขได้อีกต่อไป - โดยเฉพาะส่วนหัว ที่ตั้งซึ่งระบุว่าจะอยู่ในหน้าที่ร้องขอหรือขอหน้าอื่น - การตอบสนองของสคริปต์ "ตัวเปลี่ยนเส้นทาง" (สำหรับเรานี่คือตัวจัดการแบบฟอร์ม) เพียงบอกว่าเราต้องขอหน้าอื่น) ซึ่งเป็นสิ่งที่ php เตือนเรา .

แต่:แน่นอนว่าเป็นไปไม่ได้ที่จะแก้ไขปัญหาด้วยวิธีนี้ (ไม่ถูกต้องมากนักและแม่นยำยิ่งขึ้น)

_____________
คณะคณิตศาสตร์ มศว และคณะคลาสสิคอื่นๆ =)

  • เข้าสู่ระบบเพื่อแสดงความคิดเห็น

ทำความเข้าใจเกี่ยวกับส่วนหัว HTTP และฟิลด์ส่วนหัว HTTP

ส่วนหัว HTTPให้ข้อมูลสำคัญที่จำเป็นสำหรับธุรกรรม HTTP ที่ส่งผ่าน โปรโตคอล http.

รูปแบบส่วนหัว HTTP ทั่วไปประกอบด้วยคู่ชื่อ - ค่าที่คั่นด้วยโคลอนในฟิลด์ส่วนหัว คู่ชื่อ-ค่าแต่ละคู่ลงท้ายด้วยลำดับอักขระขึ้นบรรทัดใหม่ (CR) และลำดับอักขระป้อนบรรทัด (LF) ช่องว่างที่ส่วนท้ายของแต่ละส่วนหัวจะระบุจุดสิ้นสุดของส่วนหัว

รูปแบบส่วนหัวทั่วไปที่ตามมาด้วยแอปพลิเคชันมีลักษณะดังนี้:

ประเภทของส่วนหัว HTTP

ส่วนหัวข้อความ HTTP มีสี่ประเภท พวกเขาคือ:

  • ส่วนหัวทั่วไป
  • ขอส่วนหัว
  • ส่วนหัวของการตอบกลับ
  • ส่วนหัวของเอนทิตี

ส่วนหัวทั่วไป

ฟิลด์ส่วนหัวทั่วไปมีการบังคับใช้ทั่วไปในข้อความคำขอและการตอบกลับ ฟิลด์ส่วนหัวใช้กับข้อความที่ส่งเท่านั้น และไม่ใช้กับเอนทิตีที่ถูกโอน

โครงสร้างของส่วนหัวทั่วไปมีลักษณะดังนี้:

การควบคุมแคชฟิลด์ระบุคำสั่งที่ต้องปฏิบัติตามโดยทุกกลไกการแคชในระบบคำขอและการตอบสนอง

การเชื่อมต่อฟิลด์อนุญาตให้ผู้ส่งระบุตัวเลือกที่จำเป็นสำหรับการเชื่อมต่อ ส่วนหัวของการเชื่อมต่อมีรูปแบบดังต่อไปนี้:

วันที่ฟิลด์แสดงถึงวันที่และเวลาระหว่างการเริ่มต้นข้อความ รูปแบบวันที่ที่ระบุใน HTTP มีลักษณะดังนี้:

แพรมาฟิลด์ช่วยในการรวมคำสั่งเฉพาะในการดำเนินการที่ใช้บังคับกับผู้รับในระบบคำขอและการตอบสนอง

ตัวอย่างค่าของฟิลด์ระบุว่าชุดของฟิลด์ส่วนหัวในตัวอย่างข้อความถูกเข้ารหัสด้วยการเข้ารหัสการโอนแบบก้อนหรือไม่

การโอนการเข้ารหัสฟิลด์ระบุว่ามีการใช้การเปลี่ยนแปลงประเภทใดๆ กับเนื้อหาข้อความหรือไม่

อัพเกรดฟิลด์ช่วยให้ไคลเอ็นต์สามารถระบุโปรโตคอลการสื่อสารที่รองรับเพิ่มเติมได้ นอกจากนี้ยังช่วยให้เซิร์ฟเวอร์สามารถสลับโปรโตคอลด้วยโปรโตคอลเพิ่มเติมได้

ทางฟิลด์เป็นฟิลด์บังคับที่ใช้โดยพรอกซีและเกตเวย์ซึ่งระบุโปรโตคอลระดับกลาง นอกจากนี้ยังระบุผู้รับคำขอระหว่างตัวแทนผู้ใช้และเซิร์ฟเวอร์และการตอบกลับระหว่างเซิร์ฟเวอร์และไคลเอนต์

คำเตือนฟิลด์มีข้อมูลเพิ่มเติมเกี่ยวกับสถานะข้อความและการแปลงข้อความซึ่งไม่ปรากฏในข้อความ

โดยปกติแล้วส่วนหัวคำเตือนจะถูกส่งไปพร้อมกับการตอบกลับ

ฟิลด์ส่วนหัวของคำขออนุญาตให้ไคลเอนต์ส่งข้อมูลคำขอและข้อมูลไคลเอนต์เพิ่มเติมไปยังเซิร์ฟเวอร์

โครงสร้างของส่วนหัวคำขอมีลักษณะดังนี้:

ยอมรับฟิลด์ระบุประเภทสื่อที่ยอมรับได้สำหรับการตอบสนอง

"*" ใช้เพื่อจัดกลุ่มประเภทสื่อในช่วง

"*/*" หมายถึงสื่อทุกประเภท

"type/*" ระบุประเภทย่อยทั้งหมดของประเภท

ยอมรับ Charsetฟิลด์ระบุชุดอักขระที่ยอมรับได้ ทำให้ไคลเอ็นต์สามารถเข้าใจชุดอักขระที่มีวัตถุประสงค์พิเศษเพื่อส่งสัญญาณให้เซิร์ฟเวอร์แสดงเอกสารในชุดอักขระเหล่านี้

ยอมรับการเข้ารหัสฟิลด์จะคล้ายกับยอมรับ จำกัดการตอบสนองการเข้ารหัสเนื้อหาที่ยอมรับได้

ยอมรับภาษาฟิลด์จะคล้ายกับการยอมรับ จำกัดชุดภาษาธรรมชาติที่ต้องการ

การอนุญาตฟิลด์นี้มีไว้สำหรับตัวแทนผู้ใช้ที่ต้องการตรวจสอบสิทธิ์ตนเองกับเซิร์ฟเวอร์

คาดหวังฟิลด์ระบุพฤติกรรมของเซิร์ฟเวอร์ที่ลูกค้าต้องการ

จากมีที่อยู่อีเมลของผู้ใช้ที่ควบคุมตัวแทนผู้ใช้ที่ร้องขอ

เจ้าภาพฟิลด์ระบุโฮสต์อินเทอร์เน็ตและหมายเลขพอร์ตทรัพยากรที่ร้องขอจาก URI ของผู้ใช้

ถ้า-Matchฟิลด์ถูกใช้เพื่อสร้างวิธีการแบบมีเงื่อนไข

ถ้า-แก้ไข-ตั้งแต่ field ใช้เพื่อสร้างเมธอดแบบมีเงื่อนไข หากตัวแปรที่ร้องขอไม่ได้รับการแก้ไขภายในเวลาที่กำหนด เอนทิตีจะไม่ถูกส่งคืนจากเซิร์ฟเวอร์

ถ้า-ไม่มี-ตรงกันฟิลด์ช่วยให้สามารถอัปเดตข้อมูลแคชได้อย่างมีประสิทธิภาพโดยมีค่าใช้จ่ายในการทำธุรกรรมขั้นต่ำ

ถ้า-ช่วงฟิลด์ช่วยให้ลูกค้าได้รับส่วนหนึ่งของเอนทิตีที่หายไป หรือมิฉะนั้น ลูกค้าสามารถขอให้ส่งเอนทิตีใหม่ทั้งหมดได้

ถ้า-ไม่ได้แก้ไข-ตั้งแต่ฟิลด์อนุญาตให้เซิร์ฟเวอร์ดำเนินการตามที่ร้องขอได้หากไม่มีการแก้ไขตั้งแต่เวลาที่ระบุในฟิลด์นี้

แม็กซ์ฟอร์เวิร์ดฟิลด์จัดเตรียมกลไกด้วยเมธอด TRACE และ OPTIONS เพื่อจำกัดพรอกซีหรือเกตเวย์การส่งต่อคำขอ

การอนุญาตพร็อกซีฟิลด์อนุญาตให้ไคลเอนต์ระบุเพื่อรักษาความปลอดภัยพร็อกซี

พิสัยฟิลด์ระบุเอนทิตี HTTP ในข้อความ HTTP ที่แสดงเป็นลำดับไบต์ คำขอดึงข้อมูล HTTP ร้องขอช่วงย่อยของเอนทิตีอย่างน้อยหนึ่งช่วงโดยใช้วิธี GET

ผู้อ้างอิงอนุญาตให้ไคลเอ็นต์ระบุ URI ที่อยู่ของทรัพยากรที่พบ Request-URI

ที.อี.ฟิลด์ระบุการเข้ารหัสการถ่ายโอนส่วนขยายที่สามารถยอมรับในการตอบกลับ นอกจากนี้ยังระบุว่าจะยอมรับช่องตัวอย่างในการเข้ารหัสการโอนแบบก้อนหรือไม่

ผู้ใช้-ตัวแทนฟิลด์มีข้อมูลเกี่ยวกับตัวแทนผู้ใช้ที่ร้องขอ

ส่วนหัวการตอบสนอง HTTP

ฟิลด์ส่วนหัวการตอบกลับอนุญาตให้เซิร์ฟเวอร์ส่งข้อมูลเพิ่มเติมผ่านการตอบกลับนอกเหนือจากการตอบกลับ Status-Line แบบธรรมดา

โครงสร้างของส่วนหัวการตอบกลับมีลักษณะดังนี้:

ยอมรับ-ช่วงฟิลด์ช่วยให้เซิร์ฟเวอร์ระบุการยอมรับคำขอช่วงทรัพยากร

อายุฟิลด์ระบุระยะเวลาโดยประมาณตั้งแต่เซิร์ฟเวอร์ตอบกลับไปยังผู้ส่ง

อีแท็กฟิลด์ระบุค่าปัจจุบันของแท็กเอนทิตีสำหรับคำขอ

ที่ตั้งฟิลด์จะเปลี่ยนเส้นทางผู้รับไปยังตำแหน่งอื่นที่ไม่ใช่ Request-URI เพื่อระบุทรัพยากรใหม่ให้เสร็จสมบูรณ์

พร็อกซี-รับรองความถูกต้องฟิลด์เป็นการรวมที่จำเป็นสำหรับการตอบสนองการรับรองความถูกต้องของพร็อกซี

ลองอีกครั้งหลังจากฟิลด์ถูกใช้เป็นการตอบกลับเมื่อบริการไม่พร้อมใช้งานเพื่อระบุระยะเวลาที่บริการจะยังคงไม่พร้อมใช้งานสำหรับลูกค้า

เซิร์ฟเวอร์ฟิลด์มีข้อมูลเกี่ยวกับซอฟต์แวร์ที่ใช้โดยเซิร์ฟเวอร์เพื่อจัดการคำขอ

ต่างกันไปฟิลด์ ระบุฟิลด์คำขอที่กำหนดว่าแคชมีสิทธิ์ใช้การตอบสนองของคำขอหรือไม่ โดยไม่ต้องตรวจสอบการตอบสนองอีกครั้ง

WWW-รับรองความถูกต้องฟิลด์จะใช้เมื่อข้อความตอบกลับไม่ได้รับอนุญาต

ฟิลด์ส่วนหัวของเอนทิตีกำหนดข้อมูลเมตาเกี่ยวกับเอนทิตี-เนื้อหาหรือทรัพยากรที่ร้องขอ รูปแบบส่วนหัวของเอนทิตีมีลักษณะดังนี้:

อนุญาตฟิลด์แสดงรายการชุดวิธีการที่รองรับโดยทรัพยากรที่ระบุ Request-URI

การเข้ารหัสเนื้อหาฟิลด์ถูกใช้เป็นตัวแก้ไขประเภทสื่อ

เนื้อหา-ภาษาฟิลด์อธิบายภาษาธรรมชาติสำหรับลูกค้าของเอนทิตี

ความยาวของเนื้อหาฟิลด์ระบุขนาดของเอนทิตีที่แสดงเป็นเลขทศนิยม

เนื้อหา-ตำแหน่งฟิลด์ระบุตำแหน่งทรัพยากรสำหรับเอนทิตีเมื่อสามารถเข้าถึงได้จากตำแหน่งอื่นที่ไม่ใช่ URI ที่ร้องขอ

เนื้อหา-MD5ฟิลด์จัดเตรียมการตรวจสอบความสมบูรณ์ของข้อความ (MIC) โดยใช้การสรุป MD5 บนเนื้อหาเอนทิตี

เนื้อหา-ช่วงฟิลด์ระบุตำแหน่งที่ควรใช้บางส่วนของเนื้อหาเอนทิตีแบบเต็ม

ประเภทเนื้อหาฟิลด์ระบุว่าประเภทสื่อของเนื้อหาเอนทิตีถูกส่งไปยังผู้รับหรือใช้วิธีการ GET เพื่อส่งคำขอ

หมดอายุฟิลด์ระบุวันที่/เวลาที่การตอบกลับกลายเป็นข้อมูลเก่า

แก้ไขครั้งล่าสุดฟิลด์ระบุวันที่และเวลาของการแก้ไขตัวแปรครั้งล่าสุด

ลำดับที่ชื่อฟิลด์ปรากฏในส่วนหัวเมื่อได้รับไม่มีนัยสำคัญ ส่วนหัวทั่วไปตามอัตภาพจะถูกวางไว้ก่อน ตามด้วยส่วนหัวคำขอหรือการตอบกลับโดยมีส่วนหัวของเอนทิตีที่ส่วนท้าย

ประกาศเกี่ยวกับลิขสิทธิ์: โปรดอย่าคัดลอกหรือแปลบทความนี้โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษรล่วงหน้าจากไซต์

HTTP Debugger เป็นตัววิเคราะห์ HTTP ที่ไม่ต้องใช้พร็อกซีสำหรับนักพัฒนาที่ให้ความสามารถในการจับภาพและวิเคราะห์ส่วนหัว HTTP, คุกกี้, พารามิเตอร์ POST, เนื้อหา HTTP และส่วนหัว CORS จากเบราว์เซอร์หรือแอปพลิเคชันเดสก์ท็อปใด ๆ

UI ที่ยอดเยี่ยมและใช้งานง่ายมาก ไม่ใช่พรอกซี ไม่มีปัญหาเครือข่าย!

วันหนึ่ง เมื่อฉันไปที่บล็อก ฉันรู้สึกประหลาดใจที่พบข้อผิดพลาดที่ไม่สามารถเข้าใจได้ เช่น:

คำเตือน: ไม่สามารถแก้ไขข้อมูลส่วนหัว — ส่วนหัวที่ส่งไปแล้ว (เอาต์พุตเริ่มต้นที่ /xxxxxxxx/wp-config.php:1)

ยิ่งกว่านั้นไม่มีวิธีเข้าสู่แผงผู้ดูแลระบบ ฉันไปตรวจสอบทันทีว่ามีอะไรผิดปกติกับไฟล์ wp-config.php ทุกอย่างเรียบร้อยดี รหัสผ่านฐานข้อมูลถูกต้อง ฉันคิดว่ามันถูกแฮ็กอีกครั้ง)) แต่ขอย้ำอีกครั้งว่า FTP ไม่มีสัญญาณของการก่อกวน สิ่งที่แปลกประหลาดที่สุด (ซึ่งท้ายที่สุดแล้วฉันก็สับสนไปหมด) ก็คือ มีเพียงลิงก์ไปยังเว็บไซต์ที่ไม่มี www เท่านั้นที่ใช้งานไม่ได้ หรือในทางกลับกัน (ฉันจำไม่ได้แน่ชัด) ฉันเริ่มติดต่อโฮสต์โดยดูการตั้งค่าในแผงผู้ดูแลระบบโดเมน โดยทั่วไปแล้วมีหลายสิ่งหลายอย่าง แต่มันกลับกลายเป็นว่าง่ายกว่ามาก -ที่จุดเริ่มต้นของไฟล์ปรับแต่งมี BOM บางอย่าง

ในโปรแกรมแก้ไขข้อความบางตัว คุณอาจพบ "รวม Unicode Signature (BOM)", "เพิ่ม Byte Order Mark" หรือช่องทำเครื่องหมายที่คล้ายกันในการตั้งค่า มิฉะนั้นหากไม่สามารถปิดการใช้งานตัวเลือกที่ไม่จำเป็นในโปรแกรมใดโปรแกรมหนึ่งได้ก็ไม่แนะนำให้ใช้ ในฟอรั่มเฉพาะคุณสามารถค้นหารายการที่ดีได้ โปรแกรมแก้ไขข้อความ, นี้ - Notepad2, PSPad, UnicEdit, Notepad++- โดยทั่วไปแล้ว มีการเขียนมากมายเกี่ยวกับเรื่องหลังนี้ มันเป็นเครื่องมือที่ทรงพลังมาก บังเอิญฉันมีมันอยู่ในคอมพิวเตอร์ของฉัน บรรณาธิการสำรองอาเคลแพด— ฉันใช้มันสำหรับงานที่คล้ายกัน

อีกประเด็นที่ควรสังเกตก็คือ ข้อผิดพลาดกับ BOM สามารถเกิดขึ้นได้ไม่เพียงแต่ในไฟล์ wp-config.php เท่านั้น นอกจากนี้ หากปิดใช้งานตัวเลือกในการแสดงคำเตือน คุณจะไม่เห็นว่าปัญหาคืบคลานไปที่ใดเลย ในกรณีเช่นนี้ (และอื่นๆ ทั้งหมด) ฉันขอแนะนำให้ใช้วิธีง่ายๆ สคริปต์สำหรับค้นหาไฟล์ด้วย BOM- ต้องขอบคุณ Yuri Belotitsky สำหรับการพัฒนา

การใช้สคริปต์นั้นง่ายมาก

  1. ไฟล์ที่ต้องการ
  2. คุณเทมันลงไป เซิร์ฟเวอร์เอฟทีพีไปยังไดเร็กทอรีราก หากไม่ได้ติดตั้ง WordPress ในรูทของไซต์ (แต่ในโฟลเดอร์บล็อก เป็นต้น) จะต้องวางสคริปต์ในไดเร็กทอรีที่ WordPress ตั้งอยู่ และเรียกใช้จากที่นั่น
  3. การเปิดตัวนั้นง่ายมาก - เพียงพิมพ์เข้าไป แถบที่อยู่ลิงค์เบราว์เซอร์ http://your.site/find_bom.php

เป็นผลให้คุณได้รับรายการไฟล์ที่ผิดพลาด อย่างไรก็ตาม เพื่อเพิ่มความเร็วในการทำงาน สคริปต์จะตรวจสอบเฉพาะไดเร็กทอรีที่ผู้ใช้มักจะอัปโหลดไฟล์ - รูท /wp-content/themes และ /wp-content/plugins

นั่นคือทั้งหมด มันยากแค่ไหนที่จะแก้ไขปัญหาง่ายๆ เช่นนี้ ฉันหวังว่าฉันจะช่วยคุณได้เล็กน้อยจากประสบการณ์ของฉัน และตอนนี้เมื่อมีคำเตือนที่เกี่ยวข้องปรากฏขึ้น คุณจะรู้ว่าต้องทำอย่างไร :) หากคุณไม่สามารถแก้ไขไฟล์หนึ่งหรือไฟล์อื่นจาก BOM คุณสามารถอัปโหลดไฟล์ใหม่จากการกระจาย WordPress .

ป.ล. สถานที่ที่เหมาะสมสำหรับคู่บ่าวสาวคือการจัดงานเลี้ยงและแก้ไขปัญหาทั้งหมดที่เกี่ยวข้องกับงานแต่งงาน