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

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

ตามข้อกําหนดของ 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 ที่ซ้ำกันและมีค่าหลายค่าสำหรับส่วนหัว HTTP โปรดทราบว่าคุณไม่สามารถกําหนดค่าเหล่านี้ได้ในตัวประมวลผลข้อความโดยใช้ไวยากรณ์โทเค็นที่อธิบายไว้ในวิธีกำหนดค่า Edge เท่านั้น

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

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

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

multivalued, allowDuplicate,

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

HTTPHeader.HEADER_NAME

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

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

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

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

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

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

  • HTTPHeader.HEADER_NAME=multivalued, allowDuplicate

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

  • HTTPHeader.HEADER_NAME=

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

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

ส่วนนี้จะอธิบายวิธีระบุข้อมูลต่อไปนี้

  • ส่วนหัวเฉพาะที่ไม่ได้รับอนุญาตให้ซ้ำกันและมีค่าหลายค่า ในการตั้งค่า Private Cloud ของ Apigee Edge และ
  • ส่วนหัวเฉพาะที่มีการกำหนดค่าที่มีอยู่แล้ว
  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

ส่งคำขอ HEADERS ขาออกตามค่าของ conf/http.properties+HTTPHeader.test-header=
<ว่าง> allowDuplicate 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 ที่ซ้ำกันและมีค่าหลายค่าสำหรับส่วนหัว 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

การปิดใช้งานรายการที่อนุญาตสำหรับส่วนหัว

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

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

หัวข้อนี้จะอธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้ 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