คุณกําลังดูเอกสารประกอบของ 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 ค่าเริ่มต้น:
|
|
|
พร็อพเพอร์ตี้นี้ใช้เพื่อลบล้างลักษณะการทำงานของส่วนหัวที่เจาะจงจากที่ |
เหมือนกับด้านบน |
ส่วนหัวที่ไม่อนุญาตให้มีค่าซ้ำและมีค่าหลายค่า
ตามที่อธิบายไว้ก่อนหน้านี้ Apigee Edge อนุญาตให้มีการทำซ้ำและค่าหลายค่าสำหรับส่วนหัว HTTP ส่วนใหญ่โดยค่าเริ่มต้น เนื่องจากพร็อพเพอร์ตี้ HTTPHeader.ANY
ได้รับการกำหนดค่าด้วยค่า multiValued, allowDuplicates.
เขียนทับการกําหนดค่า
สําหรับส่วนหัวที่เฉพาะเจาะจงบางรายการ ระบบจะเขียนทับการกําหนดค่าเริ่มต้นโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
HTTPHeader.HEADER_NAME=multiValued, allowDuplicates
การกำหนดค่านี้จะไม่เปลี่ยนแปลงลักษณะการทำงานเริ่มต้น กล่าวคือ อนุญาตให้ส่วนหัวที่เฉพาะเจาะจงมีรายการที่ซ้ำกันและมีหลายค่า
HTTPHeader.HEADER_NAME=
การกําหนดค่านี้จะเปลี่ยนลักษณะการทํางานเริ่มต้น กล่าวคือ ไม่อนุญาตให้ส่วนหัวที่เฉพาะเจาะจงมีค่าที่ซ้ำกันและมีหลายค่า
การกำหนดส่วนหัวที่ไม่อนุญาตให้ทำซ้ำและมีค่าหลายค่า
หัวข้อนี้จะอธิบายวิธีระบุข้อมูลต่อไปนี้
- ส่วนหัวที่เฉพาะเจาะจงซึ่งไม่อนุญาตให้มีรายการที่ซ้ำกันและมีหลายค่า ในการตั้งค่า Apigee Edge Private Cloud และ
- ส่วนหัวเฉพาะที่มีการกำหนดค่าอยู่แล้ว
ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้
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
ในตัวประมวลผลข้อความที่มี 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 |
เราแบ่ง
จากนั้นระบบจะแสดงข้อผิดพลาด |
เราแบ่ง
แต่ระบบจะส่งแบบฟอร์มต้นฉบับไปยังเป้าหมาย |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
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
) เป็นตัวอย่างส่วนหัวที่เราต้องการอนุญาตให้มีรายการที่ซ้ำกันและมีค่าหลายรายการตามที่อธิบายไว้ด้านล่าง
-
ระบุค่าปัจจุบันของพร็อพเพอร์ตี้
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
เอาต์พุตของคำสั่งข้างต้นจะเป็นผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้
- หากตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง แสดงว่ามีการเขียนทับค่า (และนี่คือส่วนหัวที่มีการกําหนดค่าที่มีอยู่ก่อนแล้ว) เพื่อไม่อนุญาตให้มีส่วนหัวและค่าที่ซ้ำกัน กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
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
หากต้องการรีสตาร์ทโดยไม่ส่งผลกระทบต่อการเข้าชม โปรดดูหัวข้อ การรีสตาร์ทตัวประมวลผลข้อความแบบค่อยเป็นค่อยไปโดยไม่ส่งผลกระทบต่อการเข้าชม
- หากมีตัวประมวลผลข้อความมากกว่า 1 รายการ ให้ทำตามขั้นตอนข้างต้นซ้ำกับตัวประมวลผลข้อความทั้งหมด
ยืนยันว่าส่วนหัวได้รับการกําหนดค่าให้มีค่าที่ซ้ำกันและมีหลายค่า
ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME
สำหรับส่วนหัวที่เฉพาะเจาะจงได้รับการอัปเดตเรียบร้อยแล้วเพื่ออนุญาตให้มีรายการที่ซ้ำกันในโปรแกรมประมวลผลข้อความ
เราจะใช้ Expires
เป็นตัวอย่างส่วนหัวและตรวจสอบว่ามีการอัปเดตพร็อพเพอร์ตี้ที่เกี่ยวข้อง HTTPHeader.Expires
หรือไม่
แม้ว่าคุณจะใช้โทเค็น conf_http_HTTPHeader.Expires
เพื่ออัปเดตค่าในโปรแกรมประมวลผลข้อความ แต่ก็ต้องยืนยันว่ามีการตั้งค่าพร็อพเพอร์ตี้จริง HTTPHeader.Expires
ด้วยค่าใหม่หรือไม่
- ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้
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_NAME
ในโปรแกรมประมวลผลข้อความสําเร็จ คําสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์http.properties
ผลลัพธ์ตัวอย่างจากคำสั่งข้างต้นหลังจากที่กำหนดค่า
allowDuplicates
และmultiValued
แล้วมีดังนี้/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- ในตัวอย่างเอาต์พุตด้านบน โปรดทราบว่ามีการตั้งค่าพร็อพเพอร์ตี้
HTTPHeader.Expires
ด้วยค่าใหม่allowDuplicates, multiValued
ในhttp.properties
ซึ่งหมายความว่ามีการกําหนดค่าลักษณะการทํางานที่อนุญาตให้มีรายการที่ซ้ำกันและมีค่าหลายค่าในHTTPHeader
เรียบร้อยแล้วในโปรแกรมประมวลผลข้อความ - หากคุณยังเห็นค่าเดิมของพร็อพเพอร์ตี้
HTTPHeader.HEADER_NAME
ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ในการกำหนดค่า AllowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้องตรวจสอบว่าพร็อกซีทํางานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทํางานเพื่อรับและตั้งค่าส่วนหัวในพร็อกซี
- หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge
การปิดใช้ allowDuplicates สําหรับส่วนหัว
ส่วนนี้จะอธิบายวิธีกำหนดค่าพร็อพเพอร์ตี้ HTTPHeader.{Headername}
ให้ไม่อนุญาตให้ใช้ค่าซ้ำและค่าหลายค่าสำหรับส่วนหัว HTTP ที่เฉพาะเจาะจงในโปรแกรมประมวลผลข้อความ โดยใช้โทเค็นที่เกี่ยวข้องตามไวยากรณ์ที่อธิบายไว้ในวิธีกำหนดค่า Edge
ในส่วนนี้ เราจะใช้ Expires
(และ myheader
) เป็นตัวอย่างส่วนหัวที่เราไม่ต้องการให้ซ้ำกันตามที่อธิบายไว้ด้านล่าง
-
ระบุค่าปัจจุบันของพร็อพเพอร์ตี้
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
เอาต์พุตของคําสั่งข้างต้นจะแสดงผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้
- หากตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง แสดงว่าค่านั้นมีการเขียนทับเป็น "ไม่" เพื่อไม่อนุญาตให้ใช้ส่วนหัวที่ซ้ำกันและมีค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
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 - หากตั้งค่าพร็อพเพอร์ตี้เป็นค่าว่าง แสดงว่าค่านั้นมีการเขียนทับเป็น "ไม่" เพื่อไม่อนุญาตให้ใช้ส่วนหัวที่ซ้ำกันและมีค่าหลายค่า กล่าวคือ คุณไม่ได้รับอนุญาตให้ส่งส่วนหัว
- หากสังเกตเห็นสิ่งใดสิ่งหนึ่งต่อไปนี้ ให้ทำตามขั้นตอนที่เหลือในส่วนนี้
- ระบบจะเขียนทับพร็อพเพอร์ตี้ที่สอดคล้องกับส่วนหัวที่เฉพาะเจาะจงเพื่ออนุญาตให้ใช้ค่าซ้ำและหลายค่า ดังที่แสดงในตัวอย่างเอาต์พุต #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
) ที่เกี่ยวข้องได้รับการอัปเดตแล้วหรือยัง
ในเครื่องประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้
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_NAME
I ในโปรแกรมประมวลผลข้อความเรียบร้อยแล้ว คำสั่งข้างต้นจะแสดงค่าใหม่ในไฟล์http.properties
- ตัวอย่างผลลัพธ์จากคําสั่งข้างต้นหลังจากที่คุณปิดใช้
allowDuplicates
มีดังนี้การกําหนดค่าที่มีอยู่
สถานการณ์ #1: ส่วนหัวหมดอายุ (ส่วนหัวที่มีการกำหนดค่าอยู่แล้ว)
/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
) ถูกปิดใช้ในตัวประมวลผลข้อความสำเร็จแล้ว หากคุณยังเห็นค่าเก่าของพร็อพเพอร์ตี้
HTTPHeader.Expires (or HTTPHeader.myheader)
ให้ตรวจสอบว่าคุณได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ในการกำหนดค่า AllowDuplicates และค่าหลายค่าสำหรับส่วนหัวอย่างถูกต้อง หากพลาดขั้นตอนใดไป ให้ทำตามขั้นตอนทั้งหมดอีกครั้งอย่างถูกต้องตรวจสอบว่าพร็อกซีทํางานตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากมีตรรกะการทํางานเพื่อรับและตั้งค่าส่วนหัวในพร็อกซี
- หากยังแก้ไขพร็อพเพอร์ตี้ไม่ได้ โปรดติดต่อทีมสนับสนุนของ Apigee Edge