在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 串。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文来自于公众号链接: 彻底掌握CORS跨源资源共享 本文接上篇公众号文章:彻底理解浏览器同源策略SOP 一.概...
    赵召阅读 505评论 0 1
  • 简介 由于受浏览器的同源策略(same-origin policy)的影响, Ajax 请求默认只能在同一域名下进...
    叫我峰兄阅读 516评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 955评论 0 4
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,137评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,413评论 0 6

友情链接更多精彩内容