javascript的post请求返回异常,可能是跨域请求

384 阅读1分钟

主要内容

记录跨域请求踩的坑

起因

为了测试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属性要设置你允许的来源,这里设置成*,表示任何来源。

总结

由于还没有系统学习网络相关方面内容,导致踩坑,其实这应该是基础知识。