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的更多相关文章

  1. Flask入门request session cookie(二)

    1 HTTP方法分类 1 GET 浏览器告知服务器:只获取页面上的信息并发给我.这是最常用的方法. 2 HEAD 浏览器告诉服务器:欲获取信息,但是只关心消息头 .应用应像处理 GET 请求一样来处理 ...

  2. 认证 协议 JWT OAuth Session Cookie

    本文翻译自Auth-Boss. 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法.认证指的是创建一个系 ...

  3. JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码

    一.Servlet package autologin.servlet.login; import java.io.IOException;import java.security.MessageDi ...

  4. @ModelAttribute设置request、response、session对象

    利用spring web提供的@ModelAttribute注解 放在类方法的参数前面表示引用Model中的数据 @ModelAttribute放在类方法上面则表示该Action类中的每个请求调用之前 ...

  5. http协议。会话控制cookie、session

    http协议是无状态的协议.每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失.那么怎么 ...

  6. 会话跟踪session cookie

    会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在 ...

  7. Web框架Danjgo之session cookie及认证组件

    一 Cookie 1 什么是Cookie Cookie翻译成中文是小饼干的意思.其实Cookie是key-value结构,类似于一个Python中的字典.随着服务器端的响应发送给客户端浏览器. 然后客 ...

  8. Session, Cookie区别

    答: 1.Session由应用服务器维护的一个服务器端的存储空间:Cookie是客户端的存储空间,由浏览器维护. 2.用户可以通过浏览器设置决定是否保存Cookie,而不能决定是否保存Session, ...

  9. session,cookie的理解(总结)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

随机推荐

  1. docker 学习操作记录 2

    记录2 [BEGIN] // :: Connecting to ... Connection established. To escape to local shell, press Ctrl+Alt ...

  2. Metasploaitable和侦察httrack-安全牛课堂网络安全之Web渗透测试练习记录

    环境配置 首先在网上下载kali的镜像以及Metasploaitable虚拟机,打开按照网上教程安装好kali虚拟机,另一边打开Metasploaitable虚拟机,进入输入初始账户msfadmin, ...

  3. ThinkPHP5 使用 JWT 进行加密

    使用 Github 的 firebase\JWT - 使用 Composer 安装此扩展 - 代码示例 <?php /** * [InterCommon-接口公用] * @Author Rain ...

  4. Zookeeper的介绍与基本部署

    目录 简介 架构 安装 StandAlone模式 1. 安装 2. 修改配置 3. 启动 4. 验证 5. 基本用法 Distributed模式 1. 配置hosts 2. 配置zoo.cfg 3. ...

  5. [译] Go语言测试进阶版建议与技巧

    阅读本篇文章前,你最好已经知道如何写基本的单元测试.本篇文章共包含3个小建议,以及7个小技巧. 建议一,不要使用框架 Go语言自身已经有一个非常棒的测试框架,它允许你使用Go编写测试代码,不需要再额外 ...

  6. play framework + sbt入门之环境搭建

    一 sbt的使用 SBT = (not so) Simple Build Tool,是scala的构建工具,与java的maven地位相同.其设计宗旨是让简单的项目可以简单的配置,而复杂的项目可以复杂 ...

  7. FRP represents an intersection of two programming paradigms.

    FRP represents an intersection of two programming paradigms. Functional programming Functional progr ...

  8. markdown使用emoji

    前几日写博客的时候在想是否能够在markdown中使用emoji呢

  9. laravel 查询随机数据

    laravel 中 随机搜索数据 $tweet = Tweet::where('id',$id) ->orderBy(\DB::raw('RAND()')) ->take(1) -> ...

  10. 将EntityFrameworkCore生成的SQL语句输出到控制台,使用hangfire

    将EntityFrameworkCore生成的SQL语句输出到控制台 参考文档如下 EF Core 日志记录要求使用一个或多个日志记录提供程序配置的 ILoggerFactory. 日志记录-EF C ...