文章目录:

在H5 App中实现自定义Token的注意事项

我们在写Hybird App时,一般都是利用Token来代替Cookie实现用户会话。

如果是发布成app的话,由于app自带了webview环境,运行时与后端服务器的关系相当于Server 2 Server,因此一般不涉及跨域的问题。

但如果发布成H5 App的话,因为是直接在终端的浏览器里运行,就会涉及到CORS(跨域资源共享)的处理问题。

关于CORS的解决办法,主要就是三个方面:

1、简单请求:不涉及Header的附加信息,直接添加以下头部响应即可:

response.setHeader("Access-Control-Allow-Origin", "*");            //允许的请求域名
response.setHeader("Access-Control-Allow-Methods", "POST, GET");    //允许的请求方式
response.setHeader("Access-Control-Allow-Headers", "*");        //允许的自定义头
response.setHeader("Access-Control-Max-Age", "3600");            //信任时间

 

2、复杂请求:如果请求或者响应的Header中包含需要处理的额外信息时,则每次实际请求之前都会发送一次OPTIONS类型的预请求,如果预请求得到正确的回应,才会发送正式请求,因此,需要服务端除了要添加上面的响应以外,还要对预请求进行处理:

String method = getRequest().getMethod().toUpperCase();
if(method == "OPTIONS"){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
}

 

3、发送Token:也是最重要的一点,如果需要通过Header向前端返回Token,那么在发送响应之前,还需要额外添加一行许可:

response.setHeader("Access-Control-Expose-Headers", "MyAppTokenName");
response.setHeader("MyAppTokenName", TokenUtil.getToken());

 

其中红色的那行代码非常重要,否则前端将无法接收到response回来的Token串。

 

posted @   网无忌  阅读(1701)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示