เมื่อฉันเรียกดู URL นี้: http://localhost:8080/foo/%5B-%5D
เซิร์ฟเวอร์ ( nc -l 8080
) ได้รับตามที่เป็นอยู่:
GET /foo/%5B-%5D HTTP/1.1
อย่างไรก็ตามเมื่อฉันพร็อกซีแอปพลิเคชันนี้ผ่าน nginx (1.1.19):
location /foo {
proxy_pass http://localhost:8080/foo;
}
คำขอเดียวกันที่ถูกส่งผ่านพอร์ต nginx ถูกส่งต่อด้วยเส้นทางที่ถอดรหัส:
GET /foo/[-] HTTP/1.1
วงเล็บเหลี่ยมที่ถอดรหัสในเส้นทาง GET ทำให้เกิดข้อผิดพลาดในเซิร์ฟเวอร์เป้าหมาย ( สถานะ HTTP 400 - อักขระผิดกฎหมายในเส้นทาง ... ) เมื่อพวกเขามาถึงยังไม่ได้หลบหนี
มีวิธีการปิดการใช้งานการถอดรหัส URL หรือเข้ารหัสมันกลับเพื่อให้เซิร์ฟเวอร์เป้าหมายได้รับเส้นทางเดียวกันเมื่อส่งผ่าน nginx หรือไม่ กฎการเขียน URL ที่ฉลาดขึ้นมาบ้าง?