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

คุณกําลังดูเอกสารประกอบของ 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 ที่ระดับโปรแกรมประมวลผลข้อความ

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

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

Apigee Edge มี 2 พร็อพเพอร์ตี้ต่อไปนี้เพื่อควบคุมลักษณะการอนุญาตให้ใช้ค่าซ้ำและค่าหลายค่าสำหรับส่วนหัว HTTP โปรดทราบว่าคุณจะกำหนดค่าการตั้งค่าดังกล่าวได้เฉพาะใน Message Processor โดยใช้ไวยากรณ์ของโทเค็นที่อธิบายไว้ในวิธีกำหนดค่า 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. ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้ 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 ในตัวประมวลผลข้อความที่มี HTTPHeader ตัวอย่างเป็น test-header

ส่งคำขอ ส่วนหัวขาออกตามค่าของ conf/http.properties+HTTPHeader.test-header=
<Blank> 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 ในระบบคลาวด์ส่วนตัวตามที่อธิบายไว้ใน วิธีกำหนดค่า Edge

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

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

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

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

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

    ตัวอย่างเช่น หากคุณพยายามตั้งค่าพร็อพเพอร์ตี้สําหรับส่วนหัว Expires ให้ตรวจสอบค่าปัจจุบันของโทเค็นพร็อพเพอร์ตี้ HTTPHeader.Expires ในโปรแกรมประมวลผลข้อความ

    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. หากมีตัวประมวลผลข้อความมากกว่า 1 รายการ ให้ทำตามขั้นตอนข้างต้นซ้ำกับตัวประมวลผลข้อความทั้งหมด

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

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

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

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

  1. ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้ 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 ในโปรแกรมประมวลผลข้อความสําเร็จ คําสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์ 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 เรียบร้อยแล้วในโปรแกรมประมวลผลข้อความ
  5. หากคุณยังเห็นค่าเดิมของพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ในการกำหนดค่า AllowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้อง

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

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

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

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

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

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

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

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

    เอาต์พุตของคําสั่งข้างต้นจะแสดงผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้

    1. หากตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง แสดงว่าค่านั้นมีการเขียนทับเป็น "ไม่" เพื่อไม่อนุญาตให้ใช้ส่วนหัวที่ซ้ำกันและมีค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว 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. ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้ 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 ในโปรแกรมประมวลผลข้อความเรียบร้อยแล้ว คำสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์ http.properties
  3. ตัวอย่างผลลัพธ์จากคําสั่งข้างต้นหลังจากที่คุณปิดใช้ allowDuplicates มีดังนี้

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

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

    /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) ถูกปิดใช้ในตัวประมวลผลข้อความสำเร็จแล้ว
  5. หากคุณยังเห็นค่าเก่าของพร็อพเพอร์ตี้ HTTPHeader.Expires (or HTTPHeader.myheader) ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ในการกำหนดค่า AllowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้อง

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

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