[SPARK-31697][WEBUI] HistoryServer should set Content-Type
### What changes were proposed in this pull request? This PR changes HistoryServer to set Content-Type. I noticed that we will get html as plain text when we access to wrong URLs which represent non-existence appId on HistoryServer. ``` <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/static/bootstrap.min.css" type="text/css"/><link rel="stylesheet" href="/static/vis-timeline-graph2d.min.css" type="text/css"/><link rel="stylesheet" href="/static/webui.css" type="text/css"/><link rel="stylesheet" href="/static/timeline-view.css" type="text/css"/><script src="/static/sorttable.js"></script><script src="/static/jquery-3.4.1.min.js"></script><script src="/static/vis-timeline-graph2d.min.js"></script><script src="/static/bootstrap.bundle.min.js"></script><script src="/static/initialize-tooltips.js"></script><script src="/static/table.js"></script><script src="/static/timeline-view.js"></script><script src="/static/log-view.js"></script><script src="/static/webui.js"></script><script>setUIRoot('')</script> <link rel="shortcut icon" href="/static/spark-logo-77x50px-hd.png"></link> <title>Not Found</title> </head> <body> <div class="container-fluid"> <div class="row"> <div class="col-12"> <h3 style="vertical-align: middle; display: inline-block;"> <a style="text-decoration: none" href="/"> <img src="/static/spark-logo-77x50px-hd.png"/> <span class="version" style="margin-right: 15px;">3.1.0-SNAPSHOT</span> </a> Not Found </h3> </div> </div> <div class="row"> <div class="col-12"> <div class="row">Application local-1589239 not found.</div> </div> </div> </div> </body> </html> ``` The reason is Content-Type not set. I confirmed it with `curl -I http://localhost:18080/history/<wrong-appId>` ``` HTTP/1.1 404 Not Found Date: Wed, 13 May 2020 06:59:29 GMT Cache-Control: no-cache, no-store, must-revalidate X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Length: 1778 Server: Jetty(9.4.18.v20190429) ``` ### Why are the changes needed? This is a bug. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? I added a test case for this issue. Closes #28519 from sarutak/fix-content-type. Authored-by: Kousuke Saruta <sarutak@oss.nttdata.com> Signed-off-by: Dongjoon Hyun <dongjoon@apache.org>
This commit is contained in:
parent
38bc45b0b5
commit
7952f44dac
|
@ -69,6 +69,9 @@ class HistoryServer(
|
|||
|
||||
private val loaderServlet = new HttpServlet {
|
||||
protected override def doGet(req: HttpServletRequest, res: HttpServletResponse): Unit = {
|
||||
|
||||
res.setContentType("text/html;charset=utf-8")
|
||||
|
||||
// Parse the URI created by getAttemptURI(). It contains an app ID and an optional
|
||||
// attempt ID (separated by a slash).
|
||||
val parts = Option(req.getPathInfo()).getOrElse("").split("/")
|
||||
|
|
|
@ -693,6 +693,17 @@ class HistoryServerSuite extends SparkFunSuite with BeforeAndAfter with Matchers
|
|||
out.close()
|
||||
}
|
||||
|
||||
test("SPARK-31697: HistoryServer should set Content-Type") {
|
||||
val port = server.boundPort
|
||||
val nonExistenceAppId = "local-non-existence"
|
||||
val url = new URL(s"http://localhost:$port/history/$nonExistenceAppId")
|
||||
val conn = url.openConnection().asInstanceOf[HttpURLConnection]
|
||||
conn.setRequestMethod("GET")
|
||||
conn.connect()
|
||||
val expectedContentType = "text/html;charset=utf-8"
|
||||
val actualContentType = conn.getContentType
|
||||
assert(actualContentType === expectedContentType)
|
||||
}
|
||||
}
|
||||
|
||||
object HistoryServerSuite {
|
||||
|
|
Loading…
Reference in a new issue