主要内容
记录跨域请求踩的坑
起因
为了测试javascript与servlet的通信写了个简单的脚本
let xhttp = new XMLHttpRequest()
const url = "http://localhost:8081/hello/Hello"
xhttp.onreadystatechange = function () {
if (xhttp.readyState == 4) {
if (xhttp.status == 200) {
alert(xhttp.responseText)
} else {
alert("no")
}
}
}
xhttp.open("POST", url, true)
xhttp.setRequestHeader("Content-Type", "text/plain")
xhttp.send("xxx")
前提是我这个servlet已经成功运行,但是运行这个脚本之后,一直收不到返回的信息,而且status一直是0,查找资料后发现涉及到跨域请求的问题,如果一个http请求是跨域的,那么在返回头处必须显示声明才能使这个返回生效,否则会被浏览器给处理,修改后servlet的doPost代码如下
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("Access-Control-Allow-Origin", "*");
PrintWriter out = resp.getWriter();
out.write("received");
out.close();
}
其中的Access-Control-Allow-Origin属性要设置你允许的来源,这里设置成*,表示任何来源。
总结
由于还没有系统学习网络相关方面内容,导致踩坑,其实这应该是基础知识。