คุณกำลังดูเอกสารประกอบของ 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 หรือไม่ ค่าเริ่มต้น:
|
|
|
พร็อพเพอร์ตี้นี้ใช้เพื่อลบล้างลักษณะการทำงานของส่วนหัวเฉพาะจากสิ่งที่ |
เหมือนกับด้านบน |
ส่วนหัวที่ไม่อนุญาตให้ซ้ำกันและมีค่าหลายค่า
ดังที่อธิบายไว้ก่อนหน้านี้ Apigee Edge จะอนุญาตส่วนหัว HTTP ส่วนใหญ่ที่ซ้ำกันและมีค่าหลายค่าสำหรับส่วนหัว HTTP ส่วนใหญ่โดยค่าเริ่มต้น เนื่องจากพร็อพเพอร์ตี้ HTTPHeader.ANY
ได้รับการกำหนดค่าด้วยค่า multivalued, allowDuplicate.
เขียนทับการกำหนดค่าแล้ว
สำหรับส่วนหัวบางรายการ ระบบจะเขียนทับการกำหนดค่าเริ่มต้นโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
การกำหนดค่านี้จะไม่เปลี่ยนแปลงลักษณะการทำงานเริ่มต้น กล่าวคือ ส่วนหัวหนึ่งๆ จะอนุญาตให้มีรายการที่ซ้ำกันและมีค่าหลายค่า
HTTPHeader.HEADER_NAME=
การกำหนดค่านี้จะเปลี่ยนลักษณะการทำงานเริ่มต้น กล่าวคือ ส่วนหัวที่เฉพาะเจาะจงจะไม่อนุญาตให้ซ้ำกันและมีค่าหลายค่า
การระบุส่วนหัวที่ไม่อนุญาตให้ซ้ำกันและมีค่าหลายค่า
ส่วนนี้จะอธิบายวิธีระบุข้อมูลต่อไปนี้
- ส่วนหัวเฉพาะที่ไม่ได้รับอนุญาตให้ซ้ำกันและมีค่าหลายค่า ในการตั้งค่า Private Cloud ของ Apigee Edge และ
- ส่วนหัวเฉพาะที่มีการกำหนดค่าที่มีอยู่แล้ว
ในเครื่องโปรแกรมประมวลผลข้อความ ให้ค้นหาพร็อพเพอร์ตี้
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
ส่งคำขอ | HEADERS ขาออกตามค่าของ conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<ว่าง> | allowDuplicate | 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 บน Private Cloud ตามที่อธิบายไว้ใน วิธีกำหนดค่า Edge
การกำหนดค่าAllowDuplicates และหลายค่าสำหรับส่วนหัว
ตามที่อธิบายไว้ในพร็อพเพอร์ตี้ส่วนหัว HTTP เพื่ออนุญาตรายการที่ซ้ำกันและมีค่าหลายค่า ค่าของพร็อพเพอร์ตี้ HTTPHeader.ANY = allowDuplicates,
multivalued
บ่งบอกว่าส่วนหัวทั้งหมดได้รับอนุญาตให้มีค่าที่ซ้ำกันและมีค่าหลายค่าใน Apigee Edge ได้ อย่างไรก็ตาม มีบางส่วนหัวที่มีการเขียนทับค่าอย่างชัดแจ้งเพื่อไม่อนุญาตส่วนหัวที่ซ้ำกัน หรือมีหลายค่าสำหรับส่วนหัวนี้โดยใช้พร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME
ส่วนนี้จะอธิบายวิธีกำหนดค่าพร็อพเพอร์ตี้ HTTPHeader.HEADER_NAME
เพื่ออนุญาตส่วนหัว HTTP ที่ซ้ำกันและมีค่าหลายค่าสำหรับส่วนหัว 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
การปิดใช้งานรายการที่อนุญาตสำหรับส่วนหัว
ส่วนนี้อธิบายวิธีกำหนดค่าพร็อพเพอร์ตี้ 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
หากต้องการรีสตาร์ทโดยไม่ส่งผลกระทบต่อการรับส่งข้อมูล โปรดดู การรีสตาร์ทโปรแกรมประมวลผลข้อความโดยไม่ส่งผลกระทบต่อการรับส่งข้อมูล
- หากมีเครื่องมือประมวลผลข้อความมากกว่า 1 เครื่อง ให้ทำตามขั้นตอนข้างต้นซ้ำในตัวประมวลผลข้อความทั้งหมด
มีการกำหนดค่าการยืนยันส่วนหัวเพื่อไม่อนุญาตให้มีการทำซ้ำและมีค่าหลายค่า
หัวข้อนี้จะอธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้ 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