记录:http协议+response+request+session+cookie
1.http协议
http协议也叫作超文本传输协议,定义了浏览器向怎样向服务器请求资源和服务器怎样将资源传给浏览器。http协议是面向事务的应用层协议,是万维网能够传递资源的可靠保障。
目前http协议有1.0和1.1两个版本。
http协议的组成可以分为两部分,分别为http请求协议和http响应协议,http请求协议定义了浏览器向服务器请求资源的方式和规则,由请求行、请求头、请求体组成,http相应协议定义服务器如何将资源传回浏览器端的规定,包括响应头、响应行、响应体。
http请求行主要包括三个信息,http协议版本、请求资源的方式、请求的资源是什么,其中http协议版本区别是
协议版本:
HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。
HTTP/1.1,发送请求,创建一次连接,获得多个web资源,保持连接。
请求头代表着客户端发送给浏览器端的一些信息,用键值对表示,比如客户端浏览器使用的语言,是否使用cookie技术,连接状态是什么等等。
|
常见请求头 |
描述 (红色掌握,其他了解) |
|
Referer |
浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链 |
|
If-Modified-Since |
浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。 |
|
Cookie |
与会话有关技术,用于存放浏览器缓存的cookie信息。 |
|
User-Agent |
浏览器通知服务器,客户端浏览器与操作系统相关信息 |
|
Connection |
保持连接状态。Keep-Alive 连接中,close 已关闭 |
|
Host |
请求的服务器主机名 |
|
Content-Length |
请求体的长度 |
|
Content-Type |
如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
|
Accept: |
浏览器可支持的MIME类型。文件类型的一种描述方式。 MIME格式:大类型/小类型[;参数] 例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件 |
|
Accept-Encoding |
浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
|
Accept-Language |
浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
响应信息:
|
Location |
指定响应的路径,需要与状态码302配合使用,完成跳转。 |
|
Content-Type |
响应正文的类型(MIME类型) 取值:text/html;charset=UTF-8 |
|
Content-Disposition |
通过浏览器以下载方式解析正文 取值:attachment;filename=xx.zip |
|
Set-Cookie |
与会话相关技术。服务器向浏览器写入cookie |
|
Content-Encoding |
服务器使用的压缩格式 取值:gzip |
|
Content-length |
响应正文的长度 |
|
Refresh |
定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。 取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn |
|
Server |
指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/> |
|
Last-Modified |
服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。 |
至于请求体,如果我们请求的方式是get,那么我们请求资源时的参数就会出现在url后面,如果是post,参数就出现在请求体中。
http响应协议的响应行包括协议版本和状态码,不同的状态码代表不同的信息。常见的状态码有404,500,200,304。
响应头将服务器端的信息传递给浏览器,如上所示。
响应体:
响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容
2.HttpServletResponse和HttpServletRequest对象
HttpServletRequest和HttpServletResponse分别代表资源请求和资源响应对象。HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都会封装在这个对象中,通过这个对象提供的方法,可以获得客户端的所有信息。HttpServletResponse则可以获得服务器端的信息。
Requset常用方法:
1.获取客户端信息 getRequestUrl();
2.获得客户机请求头getHeader();
3.获得客户端的参数getParameter(String name);
Request接收表单中文参数乱码问题,之所以会产生乱码,是因为浏览器的编码方式和服务器编码方式不一样导致的,因此解决方式是在浏览器和服务器中设置一个统一的编码,之后就按照统一的编码进行传输,客户端一般以UTF-8编码将表单数据提交到服务器,因此服务器要设置以UTF-8编码方式进行接收,方法为request.setCharacterEncoding("UTF-8")。
请求转发:请求转发是指一个web资源收到客户端的请求后,通知服务器去掉用另一个web资源进行处理。
转发的方式有两种:
1.通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,这个对象调用forward方法实现请求转发。
RequestDispatcher reqDispatcher=this.getServletContext().getRequestDispatcher("/test.jsp");
reqDispatcher.forward(request,reponse);
2.通过request对象提供的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用其forward方法。
request对象是一个域对象,可以通过Request对象在实现转发时,把Request对象带给其他web资源处理。但是只能作用一次请求中。
转发和重定向的区别:
转发:一个web资源收到客户端请求后,通知服务器调用另外一个web资源进行处理,称之为请求转发307。
重定向:一个web资源收到客户端请求后,通知浏览器调用另外一个web资源进行处理,称之为请求重定向302。
HttpServletReponse对象reponse也有自己常用的方法,再次不在累赘,常见应用向客户端输出数据,可以实现文件下载功能。
下载思路:
1.获取下载路径
2.获取下载的文件名
3.设置响应头控制浏览器以下载形式打开文件
4.获得下载文件流
5.创建缓冲区
6.通过response获得OutputStream流
7.将输入流写到缓冲区
7.将缓冲区的内容输出到客户端
reponse对象能够完成重定向
reponse.sendRedirect("");
3.cookie和session技术
两者都是会话技术,cookie作用在客户端,session作用在服务器端。从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。会话技术帮助区分客户端。
cookie技术:服务器端向浏览器端发送一个cookie,首先创建一个cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);
向客户端发送cookie
response.addCookie(Cookie cookie);
这样浏览器端就能有一个cookie信息了。服务器端怎样接受cookie哪
1)通过request获得所有的Cookie:
Cookie[] cookies = request.getCookies();
2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie
for(Cookie cookie : cookies){
if(cookie.getName().equal(cookieName)){
String cookieValue = cookie.getValue();
}
}
session会话技术
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客 户的唯一性标识JSESSIONID
怎样获得属于本客户端的session对象(内存区域)?
HttpSession session = request.getSession();
对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了)
怎样向session中存取数据(session也是一个域对象)?
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
session对象的生命周期?
创建:第一次执行request.getSession()时创建
销毁:
1)服务器(非正常)关闭时
2)session过期/失效(默认30分钟)
问题:时间的起算点 从何时开始计算30分钟?
从不操作服务器端的资源开始计时
可以在工程的web.xml中进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3)手动销毁session
session.invalidate();
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象
记录:http协议+response+request+session+cookie的更多相关文章
- Flask入门request session cookie(二)
1 HTTP方法分类 1 GET 浏览器告知服务器:只获取页面上的信息并发给我.这是最常用的方法. 2 HEAD 浏览器告诉服务器:欲获取信息,但是只关心消息头 .应用应像处理 GET 请求一样来处理 ...
- 认证 协议 JWT OAuth Session Cookie
本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系 ...
- JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码
一.Servlet package autologin.servlet.login; import java.io.IOException;import java.security.MessageDi ...
- @ModelAttribute设置request、response、session对象
利用spring web提供的@ModelAttribute注解 放在类方法的参数前面表示引用Model中的数据 @ModelAttribute放在类方法上面则表示该Action类中的每个请求调用之前 ...
- http协议。会话控制cookie、session
http协议是无状态的协议.每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失.那么怎么 ...
- 会话跟踪session cookie
会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在 ...
- Web框架Danjgo之session cookie及认证组件
一 Cookie 1 什么是Cookie Cookie翻译成中文是小饼干的意思.其实Cookie是key-value结构,类似于一个Python中的字典.随着服务器端的响应发送给客户端浏览器. 然后客 ...
- Session, Cookie区别
答: 1.Session由应用服务器维护的一个服务器端的存储空间:Cookie是客户端的存储空间,由浏览器维护. 2.用户可以通过浏览器设置决定是否保存Cookie,而不能决定是否保存Session, ...
- session,cookie的理解(总结)
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
随机推荐
- windows7 安装 docker-compose
这篇博客,默认你已经安装了docker,下面介绍如何安装docker-compose 1.访问docker-compose的git地址 2.找到最新版的docker-compose 3.打开Docke ...
- 「HAOI2015」树上操作(非树剖)
题目链接(luogu) 看到标签::树链剖分,蒟蒻Sy开始发抖,不知所措,但其实,本题只需要一个恶心普通的操作就可以了!! 前提知识:欧拉序 首先我们知道dfs序,就是在dfs过程中,按访问顺序进行编 ...
- Can not issue data manipulation statements with executeQuery()的解决方案
Can not issue data manipulation statements with executeQuery() 报错的解决方案: 把“ResultSet rs = statement. ...
- mySql使用手册-官方文档
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format oracle to_ ...
- Scrum story
鸡和猪的故事故事: 一天,一只鸡散步时遇见了猪. 鸡对猪说:“嗨,我们合伙开个餐厅吧.” 猪说:“好啊,那准备取什么店名呢?” 鸡说:“要不,就叫火腿和鸡蛋吧.” 猪直接拒绝了:“那可不行.我要割肉, ...
- Linux低延迟服务器系统调优
最近做了一些系统和网络调优相关的测试,达到了期望的效果,有些感悟.同时,我也发现知乎上对Linux服务器低延迟技术的讨论比较欠缺(满嘴高并发现象):或者对现今cpu + 网卡的低延迟潜力认识不足(动辄 ...
- 类的练习3——python编程从入门到实践
9-13 使用OrderedDict: 在练习6-4中,使用一个标准字典来表示词汇表.使用OrderedDict类来重写这个程序,并确认输出的顺序与在字典中添加的键值对的顺序一致. from coll ...
- Grafana邮件报警
一.概述 报警是Grafana的一项革命性功能,它让Grafana从一个数据可视化工具变成一个真正的任务监控工具.报警规则可以使用现有的图表控制面板设置,阈值可以通过拖拉右边的线控制,非常简单.Gra ...
- windows2008 开启SNMP服务
现在很多企业和公司管理服务器时都是通过网络监控软件对服务器的状态进行监控,在监控的时候大多是通过SNMP协议(简单网络管理协议)进行的,那么在我们的服务器端就需要开启此项服务,并进行简单的设置. 以下 ...
- Redis和数据库一致性
1.实时同步 对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存: 更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期 ...