关于java:HTTP-Cookies知识查看发送获取返回

3次阅读

共计 2245 个字符,预计需要花费 6 分钟才能阅读完成。

我最新最全的文章都在 南瓜慢说 www.pkslow.com,欢送大家来喝茶!

1 简介

HTTP Cookies是服务器发送到用户浏览器并保留在本地的一小块数据,它会在浏览器下次向同一服务器再发动申请里被携带并发送到服务器上。

Cookie 次要用于以下三个方面:

  • 会话状态治理(如用户登录状态、购物车、游戏分数或其它须要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪剖析用户行为等)

2 Chrome 查看 Cookies

通过 Chrome 弱小的工具,能够间接查看Cookies,如上面所示:

3 Cookies 的属性

3.1 限度拜访 Cookie

3.1.1 Secure 标记

标记为 SecureCookie只能被 HTTPS 协定加密过的申请发送给服务端,应用 HTTP 是不行的,但 localhost 除外。

3.1.2 HttpOnly 标记

标记为 HttpOnlyCookie只能通过 HTTP 传输,而无奈在客户端本地通过 JavaScript 拜访。这有助于缓解 跨站点脚本 (XSS) 攻打。

3.2 Cookie 的作用域

3.2.1 Domain 属性

用于指定哪些主机能够承受Cookie,如果不指定,默认为Origin,不蕴含子域名。如果指定了Domain,则个别蕴含子域名。所以,指定 Doain,限度其实更少。

比方,如果 Domain=pkslow.com,那blog.pkslow.com 也能够承受。

3.2.2 Path 属性

指定哪些门路能够承受Cookie,子门路也会匹配。

比方,如果Path=/post,那以下都能够匹配:

  • /post
  • /post/1
  • /post/1/update

4 Springboot 操作 Cookies

4.1 获取

4.1.1 通过注解 @CookieValue

@RequestMapping("/hello")
public String hello(@CookieValue("foo") String fooCookie) {// ...}

4.1.2 通过工具类 WebUtils 的 getCookie 办法

public static Cookie getCookie(HttpServletRequest request, String name) {Assert.notNull(request, "Request must not be null");
  Cookie[] cookies = request.getCookies();
  if (cookies != null) {Cookie[] var3 = cookies;
    int var4 = cookies.length;

    for(int var5 = 0; var5 < var4; ++var5) {Cookie cookie = var3[var5];
      if (name.equals(cookie.getName())) {return cookie;}
    }
  }

  return null;
}

4.1.3 WebFlux 的 ServerWebExchange 获取

HttpCookie value = exchange.getRequest().getCookies().getFirst("foo");

4.2 返回

与获取反着来就行了,获取是从 Request 中拿数据;发送就是把数据放到 Response 中去。

response.addCookie();

5 发送 Cookie

5.1 浏览器

浏览器会依据规定发送,这个不必开发人员本人解决。

5.2 Postman

Postman能够在这里设置:

5.3 curl 命令

curl -v --cookie "key1:value1;key2:value2;" http://localhost:8080/

5.4 JavaScript fetch 办法

credentialsRequest 接口的只读属性,用于示意用户代理是否应该在跨域申请的状况下从其余域发送 cookies。这与 XHR 的 withCredentials 标记类似,不同的是有三个可选值(后者是两个):

  • omit: 从不发送 cookies.
  • same-origin: 只有当 URL 与响应脚本同源才发送 cookies、HTTP Basic authentication 等验证信息.(浏览器默认值, 在旧版本浏览器,例如 safari 11 仍旧是 omit,safari 12 已更改)
  • include: 不论是不是跨域的申请, 总是发送申请资源域在本地的 cookies、HTTP Basic authentication 等验证信息.

为了让浏览器发送蕴含凭据的申请(即便是跨域源),要将 credentials: 'include' 增加到传递给 fetch()办法的 init 对象。

fetch('https://example.com', {credentials: 'include'})

如果你只想在申请 URL 与调用脚本位于同一起源处时发送凭据,请增加 credentials: 'same-origin'

// The calling script is on the origin 'https://example.com'

fetch('https://example.com', {credentials: 'same-origin'})

要改为确保浏览器不在申请中蕴含凭据,请应用 credentials: 'omit'

fetch('https://example.com', {credentials: 'omit'})

6 总结

开发中遇到了一些 Cookies 问题,整顿了一下相干的知识点。


欢送关注微信公众号 <南瓜慢说>,将继续为你更新 …

多读书,多分享;多写作,多整顿。

正文完
 0