|
9 | 9 | import java.util.Collections;
|
10 | 10 | import java.util.LinkedHashMap;
|
11 | 11 | import java.util.List;
|
| 12 | +import java.util.Locale; |
12 | 13 | import java.util.Map;
|
13 | 14 | import java.util.Optional;
|
14 | 15 | import java.util.Map.Entry;
|
@@ -158,39 +159,52 @@ static String buildUrl(String baseUrl, ClickHouseRequest<?> request) {
|
158 | 159 |
|
159 | 160 | protected static Map<String, String> createDefaultHeaders(ClickHouseConfig config, ClickHouseNode server) {
|
160 | 161 | Map<String, String> map = new LinkedHashMap<>();
|
| 162 | + boolean hasAuthorizationHeader = false; |
161 | 163 | // add customer headers
|
162 |
| - map.putAll(ClickHouseOption.toKeyValuePairs(config.getStrOption(ClickHouseHttpOption.CUSTOM_HEADERS))); |
163 |
| - map.put("Accept", "*/*"); |
| 164 | + for (Entry<String, String> header : ClickHouseOption |
| 165 | + .toKeyValuePairs(config.getStrOption(ClickHouseHttpOption.CUSTOM_HEADERS)).entrySet()) { |
| 166 | + String name = header.getKey().toLowerCase(Locale.ROOT); |
| 167 | + String value = header.getValue(); |
| 168 | + if (value == null) { |
| 169 | + continue; |
| 170 | + } |
| 171 | + if ("authorization".equals(name)) { |
| 172 | + hasAuthorizationHeader = true; |
| 173 | + } |
| 174 | + map.put(name, value); |
| 175 | + } |
| 176 | + |
| 177 | + map.put("accept", "*/*"); |
164 | 178 | if (!config.getBoolOption(ClickHouseHttpOption.KEEP_ALIVE)) {
|
165 |
| - map.put("Connection", "Close"); |
| 179 | + map.put("connection", "Close"); |
166 | 180 | }
|
167 |
| - map.put("User-Agent", config.getClientName()); |
| 181 | + map.put("user-agent", config.getClientName()); |
168 | 182 |
|
169 | 183 | ClickHouseCredentials credentials = server.getCredentials(config);
|
170 | 184 | if (credentials.useAccessToken()) {
|
171 | 185 | // TODO check if auth-scheme is available and supported
|
172 |
| - map.put("Authorization", credentials.getAccessToken()); |
173 |
| - } else { |
174 |
| - map.put("X-ClickHouse-User", credentials.getUserName()); |
| 186 | + map.put("authorization", credentials.getAccessToken()); |
| 187 | + } else if (!hasAuthorizationHeader) { |
| 188 | + map.put("x-clickhouse-user", credentials.getUserName()); |
175 | 189 | if (config.isSsl() && !ClickHouseChecker.isNullOrEmpty(config.getSslCert())) {
|
176 |
| - map.put("X-ClickHouse-SSL-Certificate-Auth", "on"); |
| 190 | + map.put("x-clickhouse-ssl-certificate-auth", "on"); |
177 | 191 | } else if (!ClickHouseChecker.isNullOrEmpty(credentials.getPassword())) {
|
178 |
| - map.put("X-ClickHouse-Key", credentials.getPassword()); |
| 192 | + map.put("x-clickhouse-key", credentials.getPassword()); |
179 | 193 | }
|
180 | 194 | }
|
181 | 195 |
|
182 | 196 | String database = server.getDatabase(config);
|
183 | 197 | if (!ClickHouseChecker.isNullOrEmpty(database)) {
|
184 |
| - map.put("X-ClickHouse-Database", database); |
| 198 | + map.put("x-clickhouse-database", database); |
185 | 199 | }
|
186 | 200 | // Also, you can use the ‘default_format’ URL parameter
|
187 |
| - map.put("X-ClickHouse-Format", config.getFormat().name()); |
| 201 | + map.put("x-clickhouse-format", config.getFormat().name()); |
188 | 202 | if (config.isResponseCompressed()) {
|
189 |
| - map.put("Accept-Encoding", config.getResponseCompressAlgorithm().encoding()); |
| 203 | + map.put("accept-encoding", config.getResponseCompressAlgorithm().encoding()); |
190 | 204 | }
|
191 | 205 | if (config.isRequestCompressed()
|
192 | 206 | && config.getRequestCompressAlgorithm() != ClickHouseCompression.LZ4) {
|
193 |
| - map.put("Content-Encoding", config.getRequestCompressAlgorithm().encoding()); |
| 207 | + map.put("content-encoding", config.getRequestCompressAlgorithm().encoding()); |
194 | 208 | }
|
195 | 209 | return map;
|
196 | 210 | }
|
@@ -251,10 +265,12 @@ protected Map<String, String> mergeHeaders(Map<String, String> requestHeaders) {
|
251 | 265 | Map<String, String> merged = new LinkedHashMap<>();
|
252 | 266 | merged.putAll(defaultHeaders);
|
253 | 267 | for (Entry<String, String> header : requestHeaders.entrySet()) {
|
254 |
| - if (header.getValue() == null) { |
255 |
| - merged.remove(header.getKey()); |
| 268 | + String name = header.getKey().toLowerCase(Locale.ROOT); |
| 269 | + String value = header.getValue(); |
| 270 | + if (value == null) { |
| 271 | + merged.remove(name); |
256 | 272 | } else {
|
257 |
| - merged.put(header.getKey(), header.getValue()); |
| 273 | + merged.put(name, value); |
258 | 274 | }
|
259 | 275 | }
|
260 | 276 | return merged;
|
|
0 commit comments