คุณกำลังดูเอกสารประกอบของ 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 หรือไม่ ค่าเริ่มต้น:
|
|
|
พร็อพเพอร์ตี้นี้ใช้เพื่อลบล้างลักษณะการทำงานของส่วนหัวที่เฉพาะเจาะจงจากสิ่งที่ระบุโดย |
เหมือนกับด้านบน |
ส่วนหัวที่ไม่อนุญาตให้มีค่าซ้ำและมีหลายค่า
ดังที่อธิบายไว้ก่อนหน้านี้ Apigee Edge อนุญาตค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP
ส่วนใหญ่โดยค่าเริ่มต้น เนื่องจากพร็อพเพอร์ตี้ HTTPHeader.ANY ได้รับการกำหนดค่าด้วยค่า multiValued, allowDuplicates.
เขียนทับการกำหนดค่าแล้ว
สำหรับส่วนหัวบางรายการ ระบบจะเขียนทับการกำหนดค่าเริ่มต้นโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
HTTPHeader.HEADER_NAME=multiValued, allowDuplicatesการกำหนดค่านี้จะไม่เปลี่ยนลักษณะการทำงานเริ่มต้น กล่าวคือ อนุญาตให้มีค่าที่ซ้ำกันและมีหลายค่าในส่วนหัวที่เฉพาะเจาะจง
.HTTPHeader.HEADER_NAME=การกำหนดค่านี้เปลี่ยนลักษณะการทำงานเริ่มต้น กล่าวคือ ส่วนหัวที่เฉพาะเจาะจง ไม่อนุญาตให้มีค่าซ้ำและมีหลายค่า
การระบุส่วนหัวที่ไม่อนุญาตให้มีค่าที่ซ้ำกันและค่าหลายค่า
ส่วนนี้จะอธิบายวิธีระบุสิ่งต่อไปนี้
- ส่วนหัวที่ไม่อนุญาตให้มีค่าที่ซ้ำกันและมีหลายค่า ในการตั้งค่า Apigee Edge Private Cloud และ
- ส่วนหัวที่เฉพาะเจาะจงซึ่งมีการกำหนดค่าที่มีอยู่แล้ว
ในเครื่อง 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>
- ดังที่อธิบายไว้ในส่วนเขียนทับการกำหนดค่า
โปรดสังเกตข้อมูลต่อไปนี้ในเอาต์พุตตัวอย่างด้านบน
- ส่วนหัว HTTP
Connectionจะถูกเขียนทับ แต่สามารถมี ค่าที่ซ้ำกันและหลายค่าได้ - ระบบจะเขียนทับส่วนหัว HTTP
HostและExpiresและ ไม่อนุญาตให้มี ค่าที่ซ้ำกันและหลายค่า - ระบบจะเขียนทับส่วนหัว HTTP
Dateและอนุญาตให้มีรายการที่ซ้ำกัน แต่ไม่อนุญาตให้มีค่าหลายค่า - ส่วนหัวทั้งหมดที่ปรากฏที่นี่ (
Connection,Host,ExpiresและDateในตัวอย่างข้างต้น) จะเรียกว่าส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนในเอกสารนี้
- ส่วนหัว HTTP
ลักษณะการทำงานของ 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 |
ภายในเราแบ่ง
จากนั้นระบบจะแสดงข้อผิดพลาด |
ภายในเราแบ่ง
แต่จะส่งแบบฟอร์มต้นฉบับไปยังเป้าหมาย |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑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) เป็นตัวอย่าง
ส่วนหัวที่เราต้องการอนุญาตค่าที่ซ้ำกันและหลายค่าตามที่อธิบายไว้ด้านล่าง
-
กำหนดค่าปัจจุบันของพร็อพเพอร์ตี้
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
เอาต์พุตของคำสั่งข้างต้นจะส่งผลให้เกิดสิ่งใดสิ่งหนึ่งต่อไปนี้
- ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะถูกเขียนทับ (และนี่คือส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนแล้ว) เพื่อไม่อนุญาตส่วนหัวที่ซ้ำกันและค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
Expiresมากกว่า 1 ครั้งเป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee - หากไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่เฉพาะเจาะจง นั่นหมายความว่าค่าดังกล่าวไม่ได้ เขียนทับ (และนี่ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อน) ซึ่งหมายความว่า สามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของ คำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee Edge
- พร็อพเพอร์ตี้จะตั้งค่าเป็น
allowDuplicates, multiValuedจากนั้น ซึ่งหมายความว่าค่าดังกล่าวเขียนทับอย่างชัดเจน (และนี่คือส่วนหัวที่มี การกำหนดค่าที่มีอยู่ก่อนแล้ว) ซึ่งหมายความว่าสามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee
ตัวอย่างเอาต์พุตของคำสั่งค้นหา
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
เอาต์พุตตัวอย่างข้างต้นแสดงว่าพร็อพเพอร์ตี้
HTTPHeader.Expiresตั้งค่าเป็น ว่าง ซึ่งหมายความว่าพร็อพเพอร์ตี้จะเขียนทับเป็นไม่อนุญาตค่าที่ซ้ำกัน หรือหลายค่าสำหรับส่วนหัวExpires - ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะถูกเขียนทับ (และนี่คือส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนแล้ว) เพื่อไม่อนุญาตส่วนหัวที่ซ้ำกันและค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
- หากคุณสังเกตเห็นว่าพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงถูกเขียนทับอย่างชัดเจน เป็นไม่อนุญาตค่าที่ซ้ำกันหรือหลายค่าตามเอาต์พุตตัวอย่าง ด้านบน คุณจึงทำตามขั้นตอนต่อไปนี้ หากไม่ได้เขียนทับอย่างชัดเจน ให้ข้ามขั้นตอนที่เหลือในส่วนนี้
- แก้ไข หากไม่มี ให้สร้างโดยทำดังนี้
/opt/apigee/customer/application/message-processor.properties
เช่น หากต้องการเปิดไฟล์โดยใช้ vi ให้ป้อนข้อมูลต่อไปนี้
vi /opt/apigee/customer/application/message-processor.properties
- เพิ่มบรรทัดในรูปแบบต่อไปนี้
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- บันทึกการเปลี่ยนแปลง
ตรวจสอบว่าไฟล์พร็อพเพอร์ตี้เป็นของ
apigeeผู้ใช้ หากไม่ได้เปิดใช้ ให้เรียกใช้คำสั่งต่อไปนี้chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
รีสตาร์ทตัวประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
หากต้องการรีสตาร์ทโดยไม่ส่งผลต่อการรับส่งข้อมูล โปรดดู การรีสตาร์ทแบบต่อเนื่องของตัวประมวลผลข้อความโดยไม่ส่งผลต่อการรับส่งข้อมูล
- หากมี Message Processor มากกว่า 1 รายการ ให้ทำขั้นตอนข้างต้นซ้ำใน Message Processor ทั้งหมด
การยืนยันว่าส่วนหัวได้รับการกำหนดค่าให้มีค่าที่ซ้ำกันและมีหลายค่า
ส่วนนี้อธิบายวิธียืนยันว่าพร็อพเพอร์ตี้
HTTPHeader.HEADER_NAME สำหรับส่วนหัวที่เฉพาะเจาะจงได้รับการอัปเดต
เรียบร้อยแล้วเพื่อให้ตัวประมวลผลข้อความอนุญาตรายการที่ซ้ำกัน
เราจะใช้ Expires เป็นส่วนหัวตัวอย่างและตรวจสอบว่าพร็อพเพอร์ตี้ที่เกี่ยวข้อง
HTTPHeader.Expires ได้รับการอัปเดตแล้วหรือไม่
แม้ว่าคุณจะใช้โทเค็น conf_http_HTTPHeader.Expires เพื่ออัปเดตค่าใน
Message Processor แต่คุณต้องยืนยันว่าได้ตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.Expires
จริงด้วยค่าใหม่แล้ว
- ในเครื่อง 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
- หากตั้งค่าใหม่สําหรับ
HTTPHeader.HEADER_NAMEon Message Processor สําเร็จ คําสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์http.properties ตัวอย่างผลลัพธ์จากคำสั่งข้างต้นหลังจากที่คุณกำหนดค่า
allowDuplicatesและmultiValuedแล้วมีดังนี้/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- ในเอาต์พุตตัวอย่างด้านบน โปรดทราบว่าพร็อพเพอร์ตี้
HTTPHeader.Expiresได้รับการตั้งค่าด้วยค่าใหม่allowDuplicates, multiValuedในhttp.propertiesซึ่งบ่งบอกว่ากำหนดค่าลักษณะการทำงานเพื่ออนุญาตค่าที่ซ้ำกันและค่าหลายค่าในHTTPHeaderใน Message Processor เรียบร้อยแล้ว - หากยังเห็นค่าเดิมสำหรับพร็อพเพอร์ตี้
HTTPHeader.HEADER_NAMEโปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ใน การกำหนดค่า allowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากคุณพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้องตรวจสอบว่าพร็อกซีทำงานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทำงานเพื่อรับและตั้งค่าส่วนหัวในพร็อกซี
- หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge
การปิดใช้ allowDuplicates สำหรับส่วนหัว
ส่วนนี้จะอธิบายวิธีตั้งค่าพร็อพเพอร์ตี้ HTTPHeader.{Headername} เพื่อไม่อนุญาตค่าที่ซ้ำกันและค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจงใน Message
Processors โดยใช้โทเค็นที่เกี่ยวข้องตามไวยากรณ์ที่อธิบายไว้ในวิธีกำหนดค่า Edge
ในส่วนนี้ เราจะใช้ Expires (และ myheader) เป็นส่วนหัวตัวอย่าง
ซึ่งเราไม่ต้องการอนุญาตให้มีรายการที่ซ้ำกันตามที่อธิบายไว้ด้านล่าง
-
กำหนดค่าปัจจุบันของพร็อพเพอร์ตี้
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
เอาต์พุตของคำสั่งข้างต้นจะส่งผลให้เกิดสิ่งใดสิ่งหนึ่งต่อไปนี้
- ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะเขียนทับเป็น NOT
เพื่ออนุญาตให้มีส่วนหัวที่ซ้ำกันและหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
Expiresมากกว่า 1 ครั้งเป็นส่วนหนึ่งของคำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee - หากไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่เฉพาะเจาะจง แสดงว่าค่าดังกล่าวไม่ได้ เขียนทับ และนี่คือส่วนหัว NOT ที่มีการกำหนดค่าที่มีอยู่ก่อน ซึ่งหมายความว่า สามารถส่งส่วนหัวที่เฉพาะเจาะจงได้มากกว่า 1 ครั้ง (อนุญาตให้มีรายการที่ซ้ำกัน) เป็นส่วนหนึ่งของ คำขอ HTTP หรือการตอบกลับ HTTP ไปยัง Apigee Edge
- พร็อพเพอร์ตี้จะตั้งค่าเป็น
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 - ระบบจะตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง ซึ่งหมายความว่าค่าจะเขียนทับเป็น NOT
เพื่ออนุญาตให้มีส่วนหัวที่ซ้ำกันและหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
- หากพบสิ่งต่อไปนี้ ให้ทำตามขั้นตอนที่เหลือในส่วนนี้
- ระบบจะเขียนทับพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงเพื่ออนุญาต ค่าที่ซ้ำกันและหลายค่าตามที่แสดงในเอาต์พุตตัวอย่าง #1 ด้านบน (ส่วนหัวที่มี การกำหนดค่าที่มีอยู่ก่อน)
- ไม่มี Hit สำหรับพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงตามที่แสดงในเอาต์พุตตัวอย่าง #2 ด้านบน (ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่ก่อนแล้ว)
ไม่เช่นนั้น ให้ข้ามขั้นตอนที่เหลือในส่วนนี้
- แก้ไขไฟล์ต่อไปนี้ หากไม่มี ให้สร้างขึ้น
/opt/apigee/customer/application/message-processor.properties
เช่น หากต้องการเปิดไฟล์โดยใช้ vi ให้ป้อนข้อมูลต่อไปนี้
vi /opt/apigee/customer/application/message-processor.properties
- เพิ่มบรรทัดในรูปแบบต่อไปนี้ลงในไฟล์พร็อพเพอร์ตี้
การกำหนดค่าที่มีอยู่
สถานการณ์ที่ 1: ส่วนหัวที่มีการกำหนดค่าอยู่แล้ว
conf_http_HTTPHeader.Expires=
ไม่มีการกำหนดค่าที่มีอยู่ก่อน
สถานการณ์ #2: ไม่ใช่ส่วนหัวที่มีการกำหนดค่าที่มีอยู่แล้ว
conf/http.properties+HTTPHeader.myheader=
- บันทึกการเปลี่ยนแปลง
- ตรวจสอบว่าไฟล์พร็อพเพอร์ตี้เป็นของ
apigeeผู้ใช้ หากไม่ได้ ให้ เรียกใช้คำสั่งต่อไปนี้chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- รีสตาร์ทตัวประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
หากต้องการรีสตาร์ทโดยไม่ส่งผลต่อการรับส่งข้อมูล โปรดดู การรีสตาร์ทแบบต่อเนื่องของตัวประมวลผลข้อความโดยไม่ส่งผลต่อการรับส่งข้อมูล
- หากมี Message Processor มากกว่า 1 รายการ ให้ทำขั้นตอนข้างต้นซ้ำใน Message Processor ทั้งหมด
การยืนยันว่ามีการกำหนดค่าส่วนหัวไม่ให้มีค่าที่ซ้ำกันและมีหลายค่า
ส่วนนี้จะอธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้
HTTPHeader.HEADER_NAME สำหรับส่วนหัวที่เฉพาะเจาะจงได้รับการอัปเดต
เรียบร้อยแล้วเพื่อไม่อนุญาตให้มีรายการที่ซ้ำกันในเครื่องมือประมวลผลข้อความ
เราจะใช้ Expires (และ myheader) เป็นส่วนหัวตัวอย่างและตรวจสอบว่าพร็อพเพอร์ตี้ที่เกี่ยวข้อง HTTPHeader.Expires (และ HTTPHeader.myheader) ได้รับการอัปเดตแล้วหรือไม่
ในเครื่อง 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
- หากตั้งค่าส่วนหัว HTTP ใหม่สําหรับ
HTTPHeader.HEADER_NAMEI ใน Message Processor สําเร็จแล้ว คําสั่งข้างต้น จะแสดงค่าใหม่ในไฟล์http.properties - ผลลัพธ์ตัวอย่างจากคำสั่งข้างต้นหลังจากที่คุณปิดใช้
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=
- ในเอาต์พุตตัวอย่างด้านบน โปรดทราบว่าพร็อพเพอร์ตี้
HTTPHeader.Expires( และHTTPHeader.myheader) ได้รับการตั้งค่าด้วยค่าใหม่ {blank}ในhttp.propertiesซึ่งบ่งบอกว่าปิดใช้ลักษณะการทำงานที่อนุญาตค่าที่ซ้ำกันและ ค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจงExpires(และmyheader) ใน Message Processor เรียบร้อยแล้ว หากยังเห็นค่าเดิมสำหรับพร็อพเพอร์ตี้
HTTPHeader.Expires (or HTTPHeader.myheader)ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ใน การกำหนดค่า allowDuplicates และค่าหลายค่าสำหรับส่วนหัว อย่างถูกต้อง หากคุณพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้องตรวจสอบว่าพร็อกซีทำงานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทำงาน ในการรับและตั้งค่าส่วนหัวในพร็อกซี
- หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge