diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md
index 8a1927a39ca..e1077f04375 100644
--- a/CHANGELOG_PENDING.md
+++ b/CHANGELOG_PENDING.md
@@ -3,3 +3,5 @@
 ### SDK Enhancements
 
 ### SDK Bugs
+
+- `private/protocol`: Use request body error message for unknown errors missing a message header
diff --git a/private/protocol/restjson/unmarshal_error.go b/private/protocol/restjson/unmarshal_error.go
index d756d8cc529..4fffd0427ba 100644
--- a/private/protocol/restjson/unmarshal_error.go
+++ b/private/protocol/restjson/unmarshal_error.go
@@ -45,7 +45,7 @@ func (u *UnmarshalTypedError) UnmarshalError(
 	msg := resp.Header.Get(errorMessageHeader)
 
 	body := resp.Body
-	if len(code) == 0 {
+	if len(code) == 0 || len(msg) == 0 {
 		// If unable to get code from HTTP headers have to parse JSON message
 		// to determine what kind of exception this will be.
 		var buf bytes.Buffer
@@ -57,7 +57,9 @@ func (u *UnmarshalTypedError) UnmarshalError(
 		}
 
 		body = ioutil.NopCloser(&buf)
-		code = jsonErr.Code
+		if len(code) == 0 {
+			code = jsonErr.Code
+		}
 		msg = jsonErr.Message
 	}
 
diff --git a/private/protocol/restjson/unmarshal_error_test.go b/private/protocol/restjson/unmarshal_error_test.go
index 97c43b7054b..9f1fbdc8895 100644
--- a/private/protocol/restjson/unmarshal_error_test.go
+++ b/private/protocol/restjson/unmarshal_error_test.go
@@ -161,6 +161,32 @@ func TestUnmarshalTypedError(t *testing.T) {
 				respMeta.RequestID,
 			),
 		},
+		"unknown code header only": {
+			Response: &http.Response{
+				Header: http.Header{
+					errorTypeHeader: []string{"UnknownError"},
+				},
+				Body: ioutil.NopCloser(strings.NewReader(unknownErrJSON)),
+			},
+			Expect: awserr.NewRequestFailure(
+				awserr.New("UnknownError", "error message", nil),
+				respMeta.StatusCode,
+				respMeta.RequestID,
+			),
+		},
+		"unknown message header only": {
+			Response: &http.Response{
+				Header: http.Header{
+					errorMessageHeader: []string{"overwritten error message"},
+				},
+				Body: ioutil.NopCloser(strings.NewReader(unknownErrJSON)),
+			},
+			Expect: awserr.NewRequestFailure(
+				awserr.New("UnknownError", "error message", nil),
+				respMeta.StatusCode,
+				respMeta.RequestID,
+			),
+		},
 		"code from header": {
 			Response: &http.Response{
 				Header: http.Header{