HTTP
HTTP
Hyper Text Transfer Protocol 超文本传输协议,作用确定请求和响应的格式,浏览器发送服务器的数据 - 请求报文,服务器返回客户端的数据 - 响应报文;
HTTP 基于TCP/IP通信协议来传递数据。
HTTP 基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
请求报文

请求行
包含三个信息 1 请求方式 2 请求URL 3 请求协议
请求消息头
-
Accept 属性告诉服务端 客户端接受什么类型的响应 ( 消息能包含文本、图像、音频、视频以及其他应用程序 专用的数据)
-
Cookie 客户端的Cookie就是通过这个属性传给服务端
Cookie: $Version=1; Skin=new; jsessionid=5F4771183629C9834F8382E23BE13C4C服务端 根据 jsessionid 客户端的多个请求是隶属于一个 Session
-
Referer 表示这个请求是从哪个URL过来的
-
Cache-Control 对缓存进行控制,可以设置响应返回数据在客户端缓存的时间,或者不缓存
Cache-Control: no-cache默认设置不缓存
// 获取请求报文中的属性名称
java.util.Enumeration<java.lang.String> getHeaderNames();
// 获取指定名称的报文头属性的值
java.lang.String getHeader(java.lang.String name)
// 获取报文头中的Cookie(读取Cookie的报文头属性)
Cookie[] getCookies() ;
// 获取Seesion 通过 Cookie JSESSIONID属性 可以获取请求关联的 Session
HttpSession getSession()
// 获取客户端本地化信息(读取 Accept-Language 的报文头属性)
java.util.Locale getLocale()
// 获取请求报文体的长度(读取Content-Length的报文头属性)
int getContentLength();
请求体
- GET 方式 ,没有请求体,但是有一个 queryString
- POST 方式,有请求体,form data
- JSON 方式,有请求体,requet payload
响应报文


**响应状态行 **
协议 / 响应状态码 响应状态
响应消息头
-
Cache-Control 响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存
Cache-Control: max-age=3600设置让客户端对响应内容缓存3600秒,也即在3600秒内,如果客户再次访问该资源,直接从客户端的缓存中返回内容给客户,不要再从服务端获取; -
**ETag ** 一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应;
-
Location 我们在JSP中让页面Redirect到一个某个A页面中,其实是让客户端再发一个请求到A页面,这个需要Redirect到的A页面的URL,其实就是通过响应报文头的Location属性告知客户端的;
-
Set-Cookie 服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
// 添加一个响应报文头属性
void setHeader(String name, String value)
// 添加Cookie报文头属性
void addCookie(Cookie cookie)
// 不但会设置Location的响应报文头,还会生成303的状态码
void sendRedirect(String location)
HTTP 无状态
服务器无法判断这两次请求是同一个客户端发过来的,还是不同的客户端发过来的;
会话跟踪
通过会话跟踪技术来解决无状态的问题,客户端第一次发请求给服务器,服务器获取 session,获取不到,则创建新的,然后响应给客户端,下次客户端给服务器发请求时,会把sessionID带给服务器,那么服务器就能获取到了,那么服务器就判断这一次请求和上次某次请求是同一个客户端,从而能够区分开客户端;
| API | Explain |
|---|---|
| request.getSession() | 获取当前的会话,没有则创键一个新的会话 |
| request.getSession(true) | 效果和不带参数相同 |
| request.getSession(false) | 获取当前会话,没有则返回 null |
| session.getId() | 获取 sessionID |
| session.isNew() | 判断当前 session 是否是新的 |
| session.getMaxInactiveInterval() | 获取 session 非激活时长,默认 1800 秒(半小时) |
| session.invalidate() | 强制性让会话立即失效 |

浙公网安备 33010602011771号