HTTP协议与Session会话以及cookies
介绍
HTTP,超文本传输协议。最大的作用就是确定了请求和响应数据的格式,浏览器发送给服务器数据:请求报文;服务i去返回给浏览器数据 :响应报文。
请求
请求包含三个部分:
- 请求行:请求的方式,请求的URL,请求的协议(一般都是HTTP1.1)
请求消息头:通过具体的参数对本次请求进行详细说明,以键值对的方式进行展现。
Accept代表可以接受的文件类型,其他表示编码格式,接受的用语言等等
比较重要的消息头:
名称 功能 Host 服务器的主机地址 Accept 声明当前能够接受的媒体类型 Referer 当前请求来源页面的地址 Content-Length 请求内容的长度 Content-Type 请求体的内容类型 Cookie 浏览器访问服务器时携带的Cookie数据 - 请求体
它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
get方式,没有请求体,但是有一个queryString,在URL之后
post方式,有请求体,from data
json格式,有请求体,request payload
响应
响应行:协议+响应状态码+响应状态
响应头
- 响应体
响应的实际内容,响应的使响应的标签等
Http是无状态的
当我们传输两次请求时,服务器无法区分是否是同一个客户端发送过来的,比如第一次请求是添加购物车,第二次是请求结账,但是服务器无法判断两次请求的主题是否为同一人。
Session会话
Session会话是浏览器通过给不同的请求分配id,标记同一个主体所发送的请求事务,达到跟踪的效果
在控制台获得打印session的消息
1 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
可以发现两次的请求的session都是相同的,但是第一次请求会创建一个,但是第二次不会去新创建一个session
常用的API,注意session的有效会话为半个小时
1 | //获取当前会话 |
Session保存作用域
1 | //向当前的session保存作用域保存一个数据,可以通过另外一个组件获得响应的值,但是与对应的sessionid相对应 |
1 | package com.zss.servlets; |
但是 注意,当我们使用两种不同的浏览器获取数据时,其对应的主体对象不同,其session也会不同,所以我们无法通过再次访问另外一个页面再次对其进行访问
cookies
1 |
|
运行以上代码之后,可以在这里找到cookies保存的地址
我们也可以对其进行设置时常,保证cookie保存的时间,时间过去,浏览器会进行删除,cookie可以帮助我们记住用户名和密码,并且设置时间,并且设置几天免登录等等操作。