protected boolean existsOnServer( String urn ) throws IOException {
		URL url = urlFor(urn);
		
		if( induceHeadErrors ) throw new ServerError("Not a real error ha ha h", 599, null, "HEAD", url.toString());
		
		HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
		urlCon.setRequestMethod("HEAD");
		urlCon.connect();
		int status = urlCon.getResponseCode();
		if( debug ) System.err.println("HEAD "+url+" -> "+status);
		if( status == 200 ) {
			return true;
		} else if( status == 404 ) {
			return false;
		} else {
			byte[] errorText = null;
			try {
				errorText = StreamUtil.slurp(urlCon.getErrorStream());
			} catch( Exception e ) { }
			
			throw new ServerError(
				"HEAD received unexpected response code "+status+"; "+urlCon.getResponseMessage(),
				status,
				errorText,
				urlCon.getRequestMethod(),
				url.toString()
			);
		}
	}