Browse Source

Merge pull request #25944 from Faless/net/http_editor_fixes

 Fix keep-alive without header in HTTP client
Rémi Verschelde 6 years ago
parent
commit
ca5ec803fc
2 changed files with 7 additions and 7 deletions
  1. 6 7
      core/io/http_client.cpp
  2. 1 0
      editor/plugins/asset_library_editor_plugin.cpp

+ 6 - 7
core/io/http_client.cpp

@@ -426,11 +426,10 @@ Error HTTPClient::poll() {
 					response_headers.clear();
 					response_headers.clear();
 					response_num = RESPONSE_OK;
 					response_num = RESPONSE_OK;
 
 
-					// Per the HTTP 1.1 spec, keep-alive is the default, but in practice
-					// it's safe to assume it only if the explicit header is found, allowing
-					// to handle body-up-to-EOF responses on naive servers; that's what Curl
-					// and browsers do
-					bool keep_alive = false;
+					// Per the HTTP 1.1 spec, keep-alive is the default.
+					// Not following that specification breaks standard implemetations.
+					// Broken web servers should be fixed.
+					bool keep_alive = true;
 
 
 					for (int i = 0; i < responses.size(); i++) {
 					for (int i = 0; i < responses.size(); i++) {
 
 
@@ -447,8 +446,8 @@ Error HTTPClient::poll() {
 							if (encoding == "chunked") {
 							if (encoding == "chunked") {
 								chunked = true;
 								chunked = true;
 							}
 							}
-						} else if (s.begins_with("connection: keep-alive")) {
-							keep_alive = true;
+						} else if (s.begins_with("connection: close")) {
+							keep_alive = false;
 						}
 						}
 
 
 						if (i == 0 && responses[i].begins_with("HTTP")) {
 						if (i == 0 && responses[i].begins_with("HTTP")) {

+ 1 - 0
editor/plugins/asset_library_editor_plugin.cpp

@@ -1338,6 +1338,7 @@ void EditorAssetLibrary::_bind_methods() {
 
 
 EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
 EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
 
 
+	requesting = REQUESTING_NONE;
 	templates_only = p_templates_only;
 	templates_only = p_templates_only;
 
 
 	VBoxContainer *library_main = memnew(VBoxContainer);
 	VBoxContainer *library_main = memnew(VBoxContainer);