บทความจากหมวดหมู่ "sidenotes"
TL: DR:
http2_max_field_size 8k; # всех спасет!
ในโปรเจ็กต์หนึ่ง หลังจากเปลี่ยนตรรกะภายในของแบ็กเอนด์ ฉันเริ่มสังเกตเห็น response_code แปลกๆ ในบันทึก ซึ่งก็คือ 0 ในบันทึกจะมีลักษณะดังนี้:
{
"timestamp": "2020-01-17T08:41:51+00:00",
"remote_addr": "zzz.zzz.zzz.zzz",
"request_time": 0,
"upstream_response_time": "",
"upstream_header_time": "",
"http_accept_language": "-language",
"response_status": 0,
"request": "",
"host": "example.com",
"upstream_addr": "",
"http_referrer": "",
"request_length": 5854,
"bytes_sent": 0,
"http_user_agent": ""
}
การอ่านเอกสารและ googling ในหัวข้อนี้ไม่ได้ผลอะไรเลย - เพราะ... มีการระบุว่าลักษณะการทำงานนี้เกิดขึ้นเมื่อไคลเอนต์ปิดการเชื่อมต่อโดยไม่ผ่านส่วนหัว และสิ่งแปลกใหม่ต่าง ๆ ที่มีขนาดบัฟเฟอร์สำหรับ wsgi_ ซึ่งในกรณีของเราไม่เหมาะกับคำว่า "ในทางใดทางหนึ่ง"
โดยทั่วไป เราตัดสินใจว่าปัญหานั้นไม่ใช่ปัญหา โดยคำนึงถึงข้อเท็จจริงที่ว่าในปริมาณของเรานั้นไม่ได้สำคัญเลย
จนกระทั่งฉันงงกับปัญหาต่อไปนี้: ในบางกรณี ลิงก์เปิดโดยไม่มีปัญหาผ่าน http แต่ปฏิเสธที่จะทำงานผ่าน https โดยสมบูรณ์ ทำให้เกิดสิ่งที่ยอดเยี่ยม: การเชื่อมต่อ #0 ไปยังโฮสต์ example.com ยังคงเหมือนเดิม
curl: (52) ตอบกลับว่างเปล่าจากเซิร์ฟเวอร์
ในบันทึก เราสามารถติดตามสิ่งนี้ได้ด้วย IP เท่านั้น - ไม่มีคำขอหรือข้อมูลอื่นใด ดังที่เห็นได้จากตัวอย่างด้านบน มีเพียงสถานะฉาวโฉ่เท่านั้นที่เป็น 0 แต่ฉันรู้ว่าฉันไม่ได้ขัดจังหวะคำขอ! ฉันเริ่มคิดว่ามีอะไรผิดพลาดเกิดขึ้น และทุกอย่างกลายเป็นเรื่องง่ายมาก:
ฟัง 443 ssl http2 งานค้าง=8192;
ถ้าคุณใช้ http2 สำหรับการเชื่อมต่อ SSL เพียงกำหนดค่าบัฟเฟอร์คำขอนั้นไม่เพียงพอ แต่ต้องกำหนดค่าใน ngx_http_v2_module ด้วย กล่าวคือ:
Синтаксис: http2_max_field_size размер;
Умолчание: http2_max_field_size 4k;
Контекст: http, server
จำกัดขนาดสูงสุดของส่วนหัวคำขอที่บีบอัดโดยใช้ HPACK ข้อจำกัดมีผลกับทั้งชื่อและค่าอย่างเท่าเทียมกัน หากใช้การเข้ารหัส Huffman ขนาดที่แท้จริงของชื่อและสตริงค่าที่คลายการบีบอัดอาจมีขนาดใหญ่กว่า ขีดจำกัดเริ่มต้นเหมาะสำหรับข้อความค้นหาส่วนใหญ่
โดยทั่วไปนี่คือมัน แล้วทำไมทั้งหมดล่ะ? เพราะความยาวของลิงค์นั้นยาว-ยาวกว่า 4k เดิม
ด้วยการตั้งค่าเป็น 8kb (หรือมากเท่าที่น่าจะเพียงพอ) เราก็สามารถแก้ไขปัญหาได้
สิ่งดังกล่าว
ที่มา: will.com