ຂໍ້ຜິດພາດພຣັອກຊີ HttpClient 4: ໂປຣໂຕຄອນ http ບໍ່ຖືກຮອງຮັບ
ເກັບຮັກສາໂຮງງານ HTTP ທຳມະດາໄວ້ໃນທະບຽນ Apache HttpClient 4 ແບບກຳນົດເອງ ເມື່ອເສັ້ນທາງ HTTPS ເຊື່ອມຕໍ່ກັບພຣັອກຊີ HTTP ກ່ອນ.
ໃນແອັບພລິເຄຊັນ Apache HttpClient 4, ປາຍທາງ HTTPS ບໍ່ໄດ້ໝາຍຄວາມວ່າທຸກການເຊື່ອມຕໍ່ເລີ່ມດ້ວຍ TLS. ພຣັອກຊີ HTTP ທຳມະດາເຂົ້າເຖິງຜ່ານການເຊື່ອມຕໍ່ທີ່ບໍ່ມີການເຂົ້າລະຫັດ ກ່ອນທີ່ CONNECT ຈະເປີດອຸໂມງ ແລະ TLS ຈະຖືກຊັ້ນໄປຫາປາຍທາງ.
ຖ້າຜູ້ຈັດການການເຊື່ອມຕໍ່ແບບກຳນົດເອງລົງທະບຽນພຽງ https, ການໂດດພຣັອກຊີຄັ້ງທຳອິດອາດລົ້ມເຫຼວດ້ວຍ UnsupportedSchemeException: http protocol is not supported.
ສຳລັບ API 4.5, ລວມໂຮງງານທັງສອງເມື່ອສ້າງຜູ້ຈັດການນັ້ນ:
var registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", tlsFactory)
.build();
var manager = new PoolingHttpClientConnectionManager(registry);
var client = HttpClients.custom()
.setConnectionManager(manager)
.setProxy(new HttpHost("proxy.example.net", 8080, "http"))
.build();
tlsFactory ແມ່ນ SSLConnectionSocketFactory ທີ່ມີຢູ່ແລ້ວຂອງແອັບພລິເຄຊັນ ພ້ອມການກວດສອບຄວາມໄວ້ວາງໃຈ ແລະ ຊື່ໂຮສຕ໌ທີ່ຕັ້ງໃຈໄວ້. ປະເພດທີ່ສະແດງເປັນຂອງແພັກເກັດ org.apache.http ຂອງ Apache 4. ສ່ວນນີ້ສົມມຸດວ່າ Java ສາມາດອະນຸມານປະເພດຕົວປ່ຽນທ້ອງຖິ່ນ; ໂຄດ Java ເກົ່າອາດໃຊ້ປະເພດທີ່ຊັດເຈນ.
ຕິດຜູ້ຈັດການທີ່ແກ້ໄຂແລ້ວເຂົ້າກັບໄຄລເອັນທີ່ໃຊ້ຕົວຈິງສຳລັບຄຳຮ້ອງ. ສຳລັບຄຳຮ້ອງ HTTPS ສາທາລະນະທີ່ອະນຸຍາດໂດຍບໍ່ມີການຢືນຢັນພຣັອກຊີ, ລາຍການ HTTP ຈາກລາຍຊື່ພຣັອກຊີ HTTPສາມາດຕື່ມທີ່ຢູ່ພຣັອກຊີຂອງ HttpHost. ການຕັ້ງຄ່າ builder ອື່ນບໍ່ໄດ້ອັບເດດໄຄລເອັນທີ່ສ້າງແລ້ວ.
ກວດສອບຄວາມເປັນເຈົ້າຂອງ builder ດ້ວຍ: HttpClientBuilder ບັນທຶກວ່າຜູ້ຈັດການການເຊື່ອມຕໍ່ທີ່ໃຫ້ຢ່າງຊັດເຈນສາມາດຂ້າມອິນພຸດການຕັ້ງຄ່າ SSL ແຍກຕ່າງຫາກຂອງມັນ. ໃສ່ໂຮງງານທີ່ຕ້ອງການໄວ້ໃນທະບຽນຂອງຜູ້ຈັດການ ແທນທີ່ຈະສົມມຸດວ່າການເອີ້ນ setSSLContext ພາຍຫຼັງຈະປ່ຽນພາຍໃນຂອງມັນ.
ການບົ່ງບອກນີ້ກ່ຽວຂ້ອງກັບທະບຽນສະຄີມທ້ອງຖິ່ນ. ການທ້າທາຍການຢືນຢັນພຣັອກຊີ ຫຼື ປາຍທາງທີ່ຖືກປະຕິເສດ ເປັນຜົນລັບພາຍຫຼັງທີ່ແຕກຕ່າງ. ຮັກສາທະບຽນໂຮງງານທັງສອງໄວ້ຂະນະທີ່ທ່ານສືບສວນການຕອບສະໜອງເຫຼົ່ານັ້ນ.