RFR: 8190312: javadoc -link doesn't work with http: -> https: URL redirects

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Nov 21 21:15:25 UTC 2018


New webrev posted:
http://cr.openjdk.java.net/~jjg/8190312/webrev.01/

The new webrev is based on the latest jdk/jdk. After resolving minor 
merge conflicts, the significant change is this one, which replaces the 
"if" with a "switch" for selected values.

465,479c472,494
<                 if (stat >= 300 && stat <= 307 && stat != 306 &&
<                         stat != HttpURLConnection.HTTP_NOT_MODIFIED) {
<                     URL base = http.getURL();
<                     String loc = http.getHeaderField("Location");
<                     URL target = null;
<                     if (loc != null) {
<                         target = new URL(base, loc);
<                     }
<                     http.disconnect();
<                     if (target == null || redirects >= 5) {
<                         throw new IOException("illegal URL redirect");
<                     }
<                     redir = true;
<                     conn = target.openConnection();
<                     redirects++;
---
 >                 // See:
 >                 // 
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
 >                 // 
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection
 >                 switch (stat) {
 >                     case 300: // Multiple Choices
 >                     case 301: // Moved Permanently
 >                     case 302: // Found (previously Moved Temporarily)
 >                     case 303: // See Other
 >                     case 307: // Temporary Redirect
 >                     case 308: // Permanent Redirect
 >                         URL base = http.getURL();
 >                         String loc = http.getHeaderField("Location");
 >                         URL target = null;
 >                         if (loc != null) {
 >                             target = new URL(base, loc);
 >                         }
 >                         http.disconnect();
 >                         if (target == null || redirects >= 5) {
 >                             throw new IOException("illegal URL 
redirect");
 >                         }
 >                         redir = true;
 >                         conn = target.openConnection();
 >                         redirects++;

-- Jon


On 11/21/2018 12:47 PM, Jonathan Gibbons wrote:
> Thanks for the research.
>
> I did cut-n-paste part of that code from mainline JDK code, but I'm 
> also OK to use your more refined suggestion.  I'll post another webrev.
>
> -- Jon
>
>
> On 11/21/2018 03:34 AM, Hannes Wallnöfer wrote:
>> I don’t think interpreting any 3xx HTTP response is a good idea.
>>
>> After some research consulting the Mozilla documentation[1] on HTTP 
>> status code it seems like:
>>
>> 304 (not modified) has different meaning and shouldn’t be returned 
>> unless we sent a conditional request.
>> 305 (use proxy) has been deprecated since HTTP 1.0 and Location would 
>> be the proxy server, not the requested document.
>>
>> On the other hand, there are new status codes 307 and 308 that are 
>> kind of „fixed“ versions of 302 and 301.
>>
>> So we probably should consider the following status codes as redirects:
>>
>> 300, 301, 302, 303, 307, 308
>>
>> [1]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
>>
>> Otherwise looks good.
>>
>> Hannes
>>
>>
>>
>>> Am 20.11.2018 um 01:13 schrieb Jonathan Gibbons 
>>> <jonathan.gibbons at oracle.com>:
>>>
>>> Please review a fix for javadoc such that it will follow redirected 
>>> URLs, including http: to https:, for URLs given on the command line 
>>> with -link.
>>>
>>> An unconditional warning is given if it is found that a URL is 
>>> redirected.
>>>
>>> The change is in Extern.java, with the primary change being the 
>>> addition of a new method `open(URL)` that allows redirection and 
>>> generates the warning message.  The other changes are cosmetic 
>>> cleanup, partly to aggregate some URL handling methods together at 
>>> the end of the file, and partly to follow IDE suggestions.
>>>
>>> The bigger part of the work is a new test, with two test cases.
>>>
>>> The first test case is a "real world" test case that uses 
>>> docs.oracle.com if it is available.  Running this test case may 
>>> require proxies to be set in order to work as intended. The test 
>>> checks if the site can be accessed, and skips the test case if not.
>>>
>>> The second case sets up two transient webservers, with an HttpServer 
>>> that redirects all requests to an HttpsServer. The test case uses 
>>> SSL credentials used in similar tests in the main test/jdk test 
>>> suite. This test case is always enabled. The test case verifies that 
>>> the warning message is generated as expected and that the generated 
>>> files do -not- use the redirected URLs. This is to avoid baking in 
>>> an assumption that all the files will be redirected. In other words, 
>>> the redirection is only used for reading the element-list or 
>>> package-list files.
>>>
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8190312
>>> Webrev: http://cr.openjdk.java.net/~jjg/8190312/webrev.00/
>>>
>>> -- Jon
>>>
>



More information about the javadoc-dev mailing list