การกําหนดค่าตัวประมวลผลข้อความเพื่ออนุญาตส่วนหัวที่ซ้ํากัน

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

ตามข้อกำหนด HTTP RFC 7230, ส่วนที่ 3.2.2: ลำดับฟิลด์ Apigee Edge คาดหวังว่าคำขอ HTTP จากไคลเอ็นต์หรือการตอบกลับ HTTP จากเซิร์ฟเวอร์แบ็กเอนด์จะไม่มีส่วนหัวเดียวกันที่ส่งมากกว่า 1 ครั้งโดยมีค่าเดียวกันหรือค่าที่แตกต่างกัน เว้นแต่ส่วนหัวที่เฉพาะเจาะจงจะมีข้อยกเว้นและได้รับอนุญาตให้มีรายการที่ซ้ำกัน

โดยค่าเริ่มต้น Apigee Edge อนุญาตให้ส่งค่าที่ซ้ำกันและค่าหลายค่าไปยังส่วนหัว HTTP ส่วนใหญ่ อย่างไรก็ตาม ระบบไม่อนุญาตให้ใช้ส่วนหัวบางรายการที่ระบุไว้ใน ส่วนหัวที่ไม่อนุญาตให้มีค่าซ้ำและมีหลายค่า ดังนั้น

  • คุณจะได้รับ 400 Bad Request พร้อมรหัสข้อผิดพลาด protocol.http.DuplicateHeader หากไคลเอ็นต์ส่งคำขอ HTTP ที่มีส่วนหัว เฉพาะมากกว่า 1 ครั้ง หรือมีค่าหลายค่าสำหรับส่วนหัว HTTP ซึ่งไม่อนุญาตให้มีค่าที่ซ้ำกัน/หลายค่าใน Apigee Edge
  • ในทำนองเดียวกัน คุณจะได้รับ 502 Bad Gateway พร้อมรหัสข้อผิดพลาด protocol.http.DuplicateHeader หากเซิร์ฟเวอร์แบ็กเอนด์ส่งการตอบกลับ HTTP พร้อมส่วนหัวที่เฉพาะเจาะจงมากกว่า 1 ครั้ง หรือมีค่าหลายค่าสำหรับส่วนหัว HTTP ที่ไม่อนุญาตให้มีค่าที่ซ้ำกันหรือหลายค่าใน Apigee Edge

วิธีแก้ปัญหาที่แนะนำสำหรับข้อผิดพลาดเหล่านี้คือการแก้ไขแอปพลิเคชันไคลเอ็นต์ และเซิร์ฟเวอร์แบ็กเอนด์ไม่ให้ส่งส่วนหัวที่ซ้ำกัน และปฏิบัติตามข้อกำหนด RFC 7230 ส่วนที่ 3.2.2: ลำดับฟิลด์ ตามที่อธิบายไว้ใน Playbook การแก้ปัญหาต่อไปนี้

อย่างไรก็ตาม ในบางกรณี คุณอาจต้องการเพิ่มข้อยกเว้นเพื่อรวมค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP บางรายการ ในกรณีเช่นนี้ คุณสามารถอนุญาตให้มีส่วนหัวที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจงได้โดยการตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME ที่ระดับ Message Processor

เอกสารนี้ให้ข้อมูลเกี่ยวกับพร็อพเพอร์ตี้นี้ อธิบายวิธีเปิดใช้พร็อพเพอร์ตี้นี้เพื่อ หลีกเลี่ยงข้อผิดพลาดที่กล่าวถึงข้างต้น และแชร์แนวทางปฏิบัติแนะนำเกี่ยวกับพร็อพเพอร์ตี้นี้

พร็อพเพอร์ตี้ส่วนหัว HTTP เพื่ออนุญาตค่าที่ซ้ำกันและหลายค่า

Apigee Edge มีพร็อพเพอร์ตี้ 2 รายการต่อไปนี้เพื่อควบคุมลักษณะการทำงานของการอนุญาต ค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP โปรดทราบว่าคุณจะกำหนดค่าเหล่านี้ได้เฉพาะใน Message Processors โดยใช้ไวยากรณ์โทเค็นที่อธิบายไว้ใน วิธีกำหนดค่า Edge

ชื่อพร็อพเพอร์ตี้ คำอธิบาย ค่าที่อนุญาต
HTTPHeader.ANY

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

ค่าเริ่มต้น:

multiValued, allowDuplicates,

  1. blank: ไม่อนุญาตให้มีค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP
  2. multiValued: แยกส่วนหัวที่มีหลายค่าออกเป็นหลายส่วนหัว อนุญาตให้ใช้ค่าหลายค่าสำหรับส่วนหัว HTTP แต่ไม่อนุญาตให้ใช้ค่าที่ซ้ำกัน ระบบจะเปิดใช้ค่า multiValued ซึ่งหมายความว่า test-header=a,b จะแปลงเป็น test-header=a และ test-header=b.
  3. allowDuplicates: อนุญาตให้มีส่วนหัว HTTP หลายรายการ (ซ้ำกัน) ที่มีชื่อเดียวกัน
  4. multiValued, allowDuplicates: ทั้งค่าหลายค่าและค่าที่ซ้ำกัน อนุญาตสำหรับส่วนหัว HTTP

HTTPHeader.HEADER_NAME

พร็อพเพอร์ตี้นี้ใช้เพื่อลบล้างลักษณะการทำงานของส่วนหัวที่เฉพาะเจาะจงจากสิ่งที่ระบุโดย HTTPHeader.ANY

เหมือนกับด้านบน

ส่วนหัวที่ไม่อนุญาตให้มีค่าซ้ำและมีหลายค่า

ดังที่อธิบายไว้ก่อนหน้านี้ Apigee Edge อนุญาตค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP ส่วนใหญ่โดยค่าเริ่มต้น เนื่องจากพร็อพเพอร์ตี้ HTTPHeader.ANY ได้รับการกำหนดค่าด้วยค่า multiValued, allowDuplicates.

เขียนทับการกำหนดค่าแล้ว

สำหรับส่วนหัวบางรายการ ระบบจะเขียนทับการกำหนดค่าเริ่มต้นโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

  • HTTPHeader.HEADER_NAME=multiValued, allowDuplicates

    การกำหนดค่านี้จะไม่เปลี่ยนลักษณะการทำงานเริ่มต้น กล่าวคือ อนุญาตให้มีค่าที่ซ้ำกันและมีหลายค่าในส่วนหัวที่เฉพาะเจาะจง

    .
  • HTTPHeader.HEADER_NAME=

    การกำหนดค่านี้เปลี่ยนลักษณะการทำงานเริ่มต้น กล่าวคือ ส่วนหัวที่เฉพาะเจาะจง ไม่อนุญาตให้มีค่าซ้ำและมีหลายค่า

การระบุส่วนหัวที่ไม่อนุญาตให้มีค่าที่ซ้ำกันและค่าหลายค่า

ส่วนนี้จะอธิบายวิธีระบุสิ่งต่อไปนี้

  • ส่วนหัวที่ไม่อนุญาตให้มีค่าที่ซ้ำกันและมีหลายค่า ในการตั้งค่า Apigee Edge Private Cloud และ
  • ส่วนหัวที่เฉพาะเจาะจงซึ่งมีการกำหนดค่าที่มีอยู่แล้ว
  1. ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้ HTTPHeader. ในไดเรกทอรี /opt/apigee/edge-message-processor/conf ดังที่แสดงด้านล่าง

    grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
    

    ตัวอย่างเอาต์พุต:

    # grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued
    … <snipped>
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host=
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates
    …
    <snipped>
  2. ดังที่อธิบายไว้ในส่วนเขียนทับการกำหนดค่า โปรดสังเกตข้อมูลต่อไปนี้ในเอาต์พุตตัวอย่างด้านบน
    1. ส่วนหัว HTTP Connection จะถูกเขียนทับ แต่สามารถมี ค่าที่ซ้ำกันและหลายค่าได้
    2. ระบบจะเขียนทับส่วนหัว HTTP Host และ Expires และ ไม่อนุญาตให้มี ค่าที่ซ้ำกันและหลายค่า
    3. ระบบจะเขียนทับส่วนหัว HTTP Date และอนุญาตให้มีรายการที่ซ้ำกัน แต่ไม่อนุญาตให้มีค่าหลายค่า
    4. ส่วนหัวทั้งหมดที่ปรากฏที่นี่ (Connection, Host, Expires และ Date ในตัวอย่างข้างต้น) จะเรียกว่าส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนในเอกสารนี้

ลักษณะการทำงานของ Apigee Edge

ตารางต่อไปนี้อธิบายลักษณะการทำงานของ Apigee Edge เมื่อมีการส่งส่วนหัวเป็นรายการที่ซ้ำกันและมีหลายค่า โดยขึ้นอยู่กับวิธีที่กำหนดค่าพร็อพเพอร์ตี้ HTTPHeader ใน Message Processor พร้อมตัวอย่าง HTTPHeader ของ test-header

ส่งคำขอ ส่วนหัวขาออกตามค่าของ conf/http.properties+HTTPHeader.test-header=
<ว่าง> allowDuplicates multiValued allowDuplicates, multiValued (ค่าเริ่มต้น)
test‑header=a,b test‑header=a,b test‑header=a,b

protocol.http.
DuplicateHeader

ภายในเราแบ่ง test-header=a,b ออกเป็น

  • test-header=a และ
  • test-header=b

จากนั้นระบบจะแสดงข้อผิดพลาด DuplicateHeader

test‑header=a,b

ภายในเราแบ่ง test-header=a,b ออกเป็น

  • test-header=a และ
  • test-header=b

แต่จะส่งแบบฟอร์มต้นฉบับไปยังเป้าหมาย

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b

ก่อนเริ่มต้น

ก่อนที่จะทำตามขั้นตอนในเอกสารนี้ โปรดตรวจสอบว่าคุณเข้าใจการกำหนดค่าพร็อพเพอร์ตี้สำหรับ Edge ใน Private Cloud ซึ่งอธิบายไว้ใน วิธีกำหนดค่า Edge

การกำหนดค่า allowDuplicates และค่าหลายค่าสำหรับส่วนหัว

ดังที่อธิบายไว้ในพร็อพเพอร์ตี้ส่วนหัว HTTP เพื่ออนุญาตค่าที่ซ้ำกันและ หลายค่า ค่าของพร็อพเพอร์ตี้ HTTPHeader.ANY = allowDuplicates, multiValued หมายความว่าส่วนหัวทั้งหมดได้รับอนุญาตให้มีค่าที่ซ้ำกันและหลายค่าใน Apigee Edge อย่างไรก็ตาม มีส่วนหัวบางรายการที่ค่าจะเขียนทับอย่างชัดเจนเพื่อไม่ให้ อนุญาตส่วนหัวที่ซ้ำกันหรือหลายค่าสำหรับส่วนหัวนั้นโดยใช้พร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME

ส่วนนี้อธิบายวิธีกำหนดค่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME เพื่ออนุญาตค่าที่ซ้ำกันและค่าหลายค่าสำหรับ ส่วนหัว HTTP ดังกล่าวใน Message Processor โดยใช้โทเค็นที่เกี่ยวข้องตามไวยากรณ์ ที่อธิบายไว้ในวิธีกำหนดค่า Edge

ในส่วนนี้ เราจะใช้ Expires (และ myheader) เป็นตัวอย่าง ส่วนหัวที่เราต้องการอนุญาตค่าที่ซ้ำกันและหลายค่าตามที่อธิบายไว้ด้านล่าง

  1. กำหนดค่าปัจจุบันของพร็อพเพอร์ตี้ HTTPHeaderHEADER_NAME เพื่อให้แน่ใจว่าไม่ได้เปิดใช้เพื่ออนุญาตค่าที่ซ้ำกันและค่าหลายค่าโดยใช้คำสั่งต่อไปนี้
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    ตัวอย่างเช่น หากคุณพยายามตั้งค่าพร็อพเพอร์ตี้สำหรับส่วนหัว Expires ให้ทำดังนี้ ตรวจสอบค่าปัจจุบันของโทเค็นพร็อพเพอร์ตี้ HTTPHeader.Expires ใน Message Processor:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    เอาต์พุตของคำสั่งข้างต้นจะส่งผลให้เกิดสิ่งใดสิ่งหนึ่งต่อไปนี้

    1. ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะถูกเขียนทับ (และนี่คือส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนแล้ว) เพื่อไม่อนุญาตส่วนหัวที่ซ้ำกันและค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว Expires มากกว่า 1 ครั้งเป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee
    2. หากไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่เฉพาะเจาะจง นั่นหมายความว่าค่าดังกล่าวไม่ได้ เขียนทับ (และนี่ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อน) ซึ่งหมายความว่า สามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของ คำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee Edge
    3. พร็อพเพอร์ตี้จะตั้งค่าเป็น allowDuplicates, multiValued จากนั้น ซึ่งหมายความว่าค่าดังกล่าวเขียนทับอย่างชัดเจน (และนี่คือส่วนหัวที่มี การกำหนดค่าที่มีอยู่ก่อนแล้ว) ซึ่งหมายความว่าสามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee

    ตัวอย่างเอาต์พุตของคำสั่งค้นหา

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=

    เอาต์พุตตัวอย่างข้างต้นแสดงว่าพร็อพเพอร์ตี้ HTTPHeader.Expires ตั้งค่าเป็น ว่าง ซึ่งหมายความว่าพร็อพเพอร์ตี้จะเขียนทับเป็นไม่อนุญาตค่าที่ซ้ำกัน หรือหลายค่าสำหรับส่วนหัว Expires

  2. หากคุณสังเกตเห็นว่าพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงถูกเขียนทับอย่างชัดเจน เป็นไม่อนุญาตค่าที่ซ้ำกันหรือหลายค่าตามเอาต์พุตตัวอย่าง ด้านบน คุณจึงทำตามขั้นตอนต่อไปนี้ หากไม่ได้เขียนทับอย่างชัดเจน ให้ข้ามขั้นตอนที่เหลือในส่วนนี้
  3. แก้ไข หากไม่มี ให้สร้างโดยทำดังนี้
    /opt/apigee/customer/application/message-processor.properties

    เช่น หากต้องการเปิดไฟล์โดยใช้ vi ให้ป้อนข้อมูลต่อไปนี้

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. เพิ่มบรรทัดในรูปแบบต่อไปนี้
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
  5. บันทึกการเปลี่ยนแปลง
  6. ตรวจสอบว่าไฟล์พร็อพเพอร์ตี้เป็นของapigeeผู้ใช้ หากไม่ได้เปิดใช้ ให้เรียกใช้คำสั่งต่อไปนี้

    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. รีสตาร์ทตัวประมวลผลข้อความ

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    หากต้องการรีสตาร์ทโดยไม่ส่งผลต่อการรับส่งข้อมูล โปรดดู การรีสตาร์ทแบบต่อเนื่องของตัวประมวลผลข้อความโดยไม่ส่งผลต่อการรับส่งข้อมูล

  8. หากมี Message Processor มากกว่า 1 รายการ ให้ทำขั้นตอนข้างต้นซ้ำใน Message Processor ทั้งหมด

การยืนยันว่าส่วนหัวได้รับการกำหนดค่าให้มีค่าที่ซ้ำกันและมีหลายค่า

ส่วนนี้อธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME สำหรับส่วนหัวที่เฉพาะเจาะจงได้รับการอัปเดต เรียบร้อยแล้วเพื่อให้ตัวประมวลผลข้อความอนุญาตรายการที่ซ้ำกัน

เราจะใช้ Expires เป็นส่วนหัวตัวอย่างและตรวจสอบว่าพร็อพเพอร์ตี้ที่เกี่ยวข้อง HTTPHeader.Expires ได้รับการอัปเดตแล้วหรือไม่

แม้ว่าคุณจะใช้โทเค็น conf_http_HTTPHeader.Expires เพื่ออัปเดตค่าใน Message Processor แต่คุณต้องยืนยันว่าได้ตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.Expires จริงด้วยค่าใหม่แล้ว

  1. ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME ในไดเรกทอรี /opt/apigee/edge-message-processor/conf แล้วตรวจสอบว่าได้ตั้งค่า ด้วยค่าใหม่ตามที่แสดงด้านล่างหรือไม่
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    เช่น หากต้องการตรวจสอบว่าพร็อพเพอร์ตี้ HTTPHeader.Expires ตั้งค่า ด้วยค่าใหม่แล้ว ให้เรียกใช้คำสั่งต่อไปนี้

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    
  2. หากตั้งค่าใหม่สําหรับ HTTPHeader.HEADER_NAME on Message Processor สําเร็จ คําสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์ http.properties
  3. ตัวอย่างผลลัพธ์จากคำสั่งข้างต้นหลังจากที่คุณกำหนดค่า allowDuplicates และ multiValued แล้วมีดังนี้

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
  4. ในเอาต์พุตตัวอย่างด้านบน โปรดทราบว่าพร็อพเพอร์ตี้ HTTPHeader.Expires ได้รับการตั้งค่าด้วยค่าใหม่ allowDuplicates, multiValued ใน http.properties ซึ่งบ่งบอกว่ากำหนดค่าลักษณะการทำงานเพื่ออนุญาตค่าที่ซ้ำกันและค่าหลายค่าใน HTTPHeader ใน Message Processor เรียบร้อยแล้ว
  5. หากยังเห็นค่าเดิมสำหรับพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME โปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ใน การกำหนดค่า allowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากคุณพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้อง

    ตรวจสอบว่าพร็อกซีทำงานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทำงานเพื่อรับและตั้งค่าส่วนหัวในพร็อกซี

  6. หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge

การปิดใช้ allowDuplicates สำหรับส่วนหัว

ส่วนนี้จะอธิบายวิธีตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.{Headername} เพื่อไม่อนุญาตค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจงใน Message Processors โดยใช้โทเค็นที่เกี่ยวข้องตามไวยากรณ์ที่อธิบายไว้ในวิธีกำหนดค่า Edge

ในส่วนนี้ เราจะใช้ Expires (และ myheader) เป็นส่วนหัวตัวอย่าง ซึ่งเราไม่ต้องการอนุญาตให้มีรายการที่ซ้ำกันตามที่อธิบายไว้ด้านล่าง

  1. กำหนดค่าปัจจุบันของพร็อพเพอร์ตี้ HTTPHeaderHEADER_NAME เพื่อให้แน่ใจว่าไม่ได้ปิดใช้อยู่แล้วเพื่ออนุญาตค่าที่ซ้ำกันและค่าหลายค่า โดยใช้คำสั่งต่อไปนี้
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    ตัวอย่างเช่น หากคุณพยายามตั้งค่าพร็อพเพอร์ตี้สำหรับส่วนหัว Expires ให้ตรวจสอบค่าปัจจุบันของโทเค็นพร็อพเพอร์ตี้ HTTPHeader.Expires ใน Message Processor ดังนี้

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    เอาต์พุตของคำสั่งข้างต้นจะส่งผลให้เกิดสิ่งใดสิ่งหนึ่งต่อไปนี้

    1. ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะเขียนทับเป็น NOT เพื่ออนุญาตให้มีส่วนหัวที่ซ้ำกันและหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว Expires มากกว่า 1 ครั้งเป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee
    2. หากไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่เฉพาะเจาะจง แสดงว่าค่าดังกล่าวไม่ได้ เขียนทับ และนี่คือส่วนหัว NOT ที่มีการกำหนดค่าที่มีอยู่ก่อน ซึ่งหมายความว่า สามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของ คำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee Edge
    3. พร็อพเพอร์ตี้จะตั้งค่าเป็น allowDuplicates, multiValued ซึ่งหมายความว่าค่าดังกล่าวถูกเขียนทับอย่างชัดเจนและนี่คือการกำหนดค่าที่มีอยู่ อย่างไรก็ตาม การดำเนินการนี้หมายความว่าสามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) ซึ่งเป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee

    เอาต์พุตตัวอย่าง #1

    ตัวอย่างเอาต์พุต #1 ของคำสั่งค้นหา:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued

    เอาต์พุตตัวอย่างแสดงว่าตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.Expires เป็น allowDuplicates, multiValued ซึ่งหมายความว่าพร็อพเพอร์ตี้จะ เขียนทับเพื่อให้มีค่าที่ซ้ำกันหรือหลายค่าสำหรับส่วนหัว Expires

    เอาต์พุตตัวอย่าง #2

    ตัวอย่างคำสั่งและเอาต์พุต #2 ของคำสั่งค้นหา

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    

    เอาต์พุตตัวอย่างไม่แสดงเอาต์พุต ซึ่งหมายความว่าพร็อพเพอร์ตี้ HTTPHeader.myheader มีค่าเริ่มต้นเป็น allowDuplicates, multiValued ซึ่งหมายความว่าพร็อพเพอร์ตี้ จะไม่ถูกเขียนทับ สำหรับส่วนหัว myheader

  2. หากพบสิ่งต่อไปนี้ ให้ทำตามขั้นตอนที่เหลือในส่วนนี้
    1. ระบบจะเขียนทับพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงเพื่ออนุญาต ค่าที่ซ้ำกันและหลายค่าตามที่แสดงในเอาต์พุตตัวอย่าง #1 ด้านบน (ส่วนหัวที่มี การกำหนดค่าที่มีอยู่ก่อน)
    2. ไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงตามที่แสดงในเอาต์พุตตัวอย่าง #2 ด้านบน (ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนแล้ว)

    ไม่เช่นนั้น ให้ข้ามขั้นตอนที่เหลือในส่วนนี้

  3. แก้ไขไฟล์ต่อไปนี้ หากไม่มี ให้สร้างขึ้น
    /opt/apigee/customer/application/message-processor.properties

    เช่น หากต้องการเปิดไฟล์โดยใช้ vi ให้ป้อนข้อมูลต่อไปนี้

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. เพิ่มบรรทัดในรูปแบบต่อไปนี้ลงในไฟล์พร็อพเพอร์ตี้

    การกำหนดค่าที่มีอยู่

    สถานการณ์ที่ 1: ส่วนหัวที่มีการกำหนดค่าอยู่แล้ว

    conf_http_HTTPHeader.Expires=

    ไม่มีการกำหนดค่าที่มีอยู่ก่อน

    สถานการณ์ #2: ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่แล้ว

    conf/http.properties+HTTPHeader.myheader=
  5. บันทึกการเปลี่ยนแปลง
  6. ตรวจสอบว่าไฟล์พร็อพเพอร์ตี้เป็นของapigeeผู้ใช้ หากไม่ได้ ให้ เรียกใช้คำสั่งต่อไปนี้
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. รีสตาร์ทตัวประมวลผลข้อความ
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    หากต้องการรีสตาร์ทโดยไม่ส่งผลต่อการรับส่งข้อมูล โปรดดู การรีสตาร์ทแบบต่อเนื่องของตัวประมวลผลข้อความโดยไม่ส่งผลต่อการรับส่งข้อมูล

  8. หากมี Message Processor มากกว่า 1 รายการ ให้ทำขั้นตอนข้างต้นซ้ำใน Message Processor ทั้งหมด

การยืนยันว่ามีการกำหนดค่าส่วนหัวไม่ให้มีค่าที่ซ้ำกันและมีหลายค่า

ส่วนนี้จะอธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME สำหรับส่วนหัวที่เฉพาะเจาะจงได้รับการอัปเดต เรียบร้อยแล้วเพื่อไม่อนุญาตให้มีรายการที่ซ้ำกันในเครื่องมือประมวลผลข้อความ

เราจะใช้ Expires (และ myheader) เป็นส่วนหัวตัวอย่างและตรวจสอบว่าพร็อพเพอร์ตี้ที่เกี่ยวข้อง HTTPHeader.Expires (และ HTTPHeader.myheader) ได้รับการอัปเดตแล้วหรือไม่

  1. ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME ในไดเรกทอรี /opt/apigee/edge-message- processor/conf แล้วตรวจสอบว่าได้ตั้งค่าด้วยค่าใหม่ตามที่ แสดงด้านล่างหรือไม่

    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    เช่น หากต้องการตรวจสอบว่าพร็อพเพอร์ตี้ HTTPHeader.Expires ตั้งค่าด้วยค่าใหม่หรือไม่ คุณสามารถเรียกใช้คำสั่งต่อไปนี้

    การกำหนดค่าที่มีอยู่

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    ไม่มีการกำหนดค่าที่มีอยู่ก่อน

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    
  2. หากตั้งค่าส่วนหัว HTTP ใหม่สําหรับ HTTPHeader.HEADER_NAME I ใน Message Processor สําเร็จแล้ว คําสั่งข้างต้น จะแสดงค่าใหม่ในไฟล์ http.properties
  3. ผลลัพธ์ตัวอย่างจากคำสั่งข้างต้นหลังจากที่คุณปิดใช้ allowDuplicates มีดังนี้

    การกำหนดค่าที่มีอยู่

    สถานการณ์ #1: ส่วนหัว Expires (ส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อน)

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=

    ไม่มีการกำหนดค่าที่มีอยู่ก่อน

    สถานการณ์ #2: ส่วนหัว myheader (ไม่ใช่ส่วนหัวที่มีการกำหนดค่าอยู่แล้ว)

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
  4. ในเอาต์พุตตัวอย่างด้านบน โปรดทราบว่าพร็อพเพอร์ตี้ HTTPHeader.Expires ( และ HTTPHeader.myheader ) ได้รับการตั้งค่าด้วยค่าใหม่ {blank} ใน http.properties ซึ่งบ่งบอกว่าปิดใช้ลักษณะการทำงานที่อนุญาตค่าที่ซ้ำกันและ ค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจง Expires (และ myheader) ใน Message Processor เรียบร้อยแล้ว
  5. หากยังเห็นค่าเดิมสำหรับพร็อพเพอร์ตี้ HTTPHeader.Expires (or HTTPHeader.myheader) ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ใน การกำหนดค่า allowDuplicates และค่าหลายค่าสำหรับส่วนหัว อย่างถูกต้อง หากคุณพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้อง

    ตรวจสอบว่าพร็อกซีทำงานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทำงาน ในการรับและตั้งค่าส่วนหัวในพร็อกซี

  6. หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge