跨域资源共享(CORS) 是一种机制,允许Web应用程序从不同的源(域)请求资源。由于浏览器的同源策略限制,通常情况下,JavaScript只能请求与其自身来源相同的资源。CORS通过在服务器端设置特定的HTTP头来允许跨域请求。
nanohttpd是一个轻量级的Java HTTP服务器库。要在nanohttpd中实现CORS,可以在响应头中添加必要的CORS字段。
import fi.iki.elonen.NanoHTTPD;
public class MyHttpServer extends NanoHTTPD {
public MyHttpServer(int port) {
super(port);
}
@Override
public Response serve(IHTTPSession session) {
String msg = "Hello, CORS!";
Response response = newFixedLengthResponse(msg);
// 添加CORS头
response.addHeader("Access-Control-Allow-Origin", "*"); // 允许所有域
response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); // 允许的方法
response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); // 允许的头
return response;
}
public static void main(String[] args) {
try {
new MyHttpServer(8080).start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
System.out.println("Server started on port 8080.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
原因:浏览器的同源策略阻止了跨域请求,服务器没有正确设置CORS头。
解决方法:
Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和Access-Control-Allow-Headers
头。*
,而是指定具体的域名。response.addHeader("Access-Control-Allow-Origin", "https://example.com"); // 指定特定域
通过以上设置,可以有效解决跨域请求被阻止的问题,确保前端应用能够顺利与后端服务进行通信。
双11音视频系列直播
高校公开课
企业创新在线学堂
停课不停学 腾讯教育在行动第四课
高校公开课