Mae rheol yn anfon http://reports.example:80/ trwy asiant ond yn gadael i http://reports.example/ fynd yn syth. Mae'r URLau hyn yn disgrifio'r un pen draw HTTP cyffredin. Daw'r camgymariad fel arfer o gymharu eu porthladdoedd wedi'u dosrsio yn llythrennol.

Mae URI.getPort() yn dychwelyd -1 pan nad oes porthladd yn yr URI. Nid yw'n disodli'r rhagosodedig ar gyfer y cynllun. Bydd polisi llwybrau sy'n cymharu'r gwerth â 80 yn colli'r ail URL.

String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
    if ("http".equalsIgnoreCase(scheme)) port = 80;
    else if ("https".equalsIgnoreCase(scheme)) port = 443;
}

Cymhwyswch yr un normaleiddiad i ddwy ochr y gymhariaeth. Mae trwsio URI'r cais yn unig yn gadael cyrchfan wedi'i ffurfweddu â phorthladd wedi'i hepgor yn anghydwedd. Cymharwch y gwesteiwr, y porthladd effeithiol a'r cynllun bwriadedig; gwrthodwch gyrchfannau diffygiol neu heb westeiwr trwy lwybr gwall diffiniedig.

Peidiwch â throi pob galwad yn benderfyniad HTTP

Gellir ymgynghori â detholydd rhagosodedig hefyd ar gyfer cysylltiadau soced crai, gan ddefnyddio'r cynllun socket. Nid yw cyfatebiaeth gwesteiwr a phorthladd yn unig yn ddigon i beri i'r alwad honno ddychwelyd asiant HTTP a fwriadwyd ar gyfer ceisiadau URL. Dirprwywch gynlluniau heb eu cefnogi i'r detholydd blaenorol, gan gadw ei ymddygiad priodol.

Cipiwch y detholydd blaenorol hwnnw cyn gosod un cyfaddas. Gall edrych i fyny'r rhagosodedig presennol o fewn y disodliad alw'r disodliad eto.

Cofnodwch y cynllun, y gwesteiwr, y porthladd gwreiddiol a'r porthladd effeithiol wrth ddiagnosio camgymariad. Peidiwch dibynnu ar un rhif a welwyd na threfn yr alwadau ar draws gweithrediadau JDK. Dylai'r polisi wneud penderfyniad cywir ar gyfer pob URI a gyflenwir.

Erthyglau cysylltiedig