记录: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通过在服务器端 ...
随机推荐
- Docker学习-从无知到有知的学习过程
Docker学习 最近被别人提到的docker吸引到了注意力,所以打算先快速的了解一下docker到底是个上面东西. 之所以我写下这个文档呢,是为了记录对docker一无所知我是如何进行学习一门新技术 ...
- C++工程师养成 每日一题(vector使用)
题目: 链接:https://www.nowcoder.com/questionTerminal/6736cc3ffd1444a4a0057dee89be789b?orderByHotValue来源: ...
- 【实战经验】--Xilinx--IPCore--FIFO
2019.12.10补充 结论:先写进的数据在独处时位于高位,后写入的数据在低位,且排序单位为Byte,即先后写入0X01,0X02,读出后也为0x010x02,此外,在写入数据量达到读出数据位宽后5 ...
- 用shell脚本批量进行xss跨站攻击请求
由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...
- java中Math类
Math类 Math类是一个很有用的数学帮助类,使用也非常简单,这个类比较特殊,首先他和String类一样都是用final修饰,所以不能有子类,还有就是它的构造方法是私有的,也就是我们不能通过new的 ...
- Django中一些常用的文档段落
1. Settings¶ STATIC_URL¶ MEDIA_ROOT¶ MEDIA_URL¶ AUTH_USER_MODEL¶ USE_I18N¶ USE_L10N¶ USE_TZ¶ (三者默 ...
- Win 10下安装 Redis
目录 写在前面 一.安装环境 二.下载windows版本的Redis 三.安装Redis 四.安装服务 五.启动服务 六.测试Redis 七.常用的Redis服务. 写在前面 Redis 是一个开源使 ...
- c# mvc webapi的put报405错误
程序在本机调试可正常修改,本机是iis11 放到服务器上,报错了:405.服务器iis7.0 返回的错误页面: <!DOCTYPE html PUBLIC "-//W3C//DTD X ...
- 象棋中“车”的攻击范围_Java
代码如下: String[][] a = new String[8][8]; int h, l; Scanner scan = new Scanner(System.in); System.out.p ...
- 配置 Log4j 以便查看 MyBatis 操作数据库的过程
在 src/main/resources中添加 log4j.properties 配置文件 ,输入如下内 容.#全局面已直 log4j .rootLogger=ERROR, stdout #MyBat ...