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. CSS3手机端字体不能小于12号的方法

    CSS3手机端字体不能小于12号的方法 <pre> .xiaoyu12fontsize{ -webkit-transform-origin: 0% 0%; -webkit-transfor ...

  2. ReentrantLock 的公平锁源码分析

    ReentrantLock 源码分析   以公平锁源码解析为例: 1:数据结构: 维护Sync 对象的引用:   private final Sync sync; Sync对象继承 AQS,  Syn ...

  3. Linux手动安装新版本Python教程(CentOS)

    一.说明 1.1 linux为什么不升级python版本 2008年python3就发布了,到2020年1月1日python2.7就停止更新了,为什么主流的linux迟迟不去除python2自带pyt ...

  4. Excel批量添加不同的批注

    Sub 批量添加不同批注() Dim rng As Range Dim i As String Range("A1:D1").ClearComments For Each rng ...

  5. Linux ssh 公私钥配置

    Linux ssh 公私钥配置 ssh 公私钥可实现无密码的情况下直接直接登录到服务端.方便我们管理,而且也可以设置ssh完全通过公私钥登录,不可通过密码登录,来提高我们的服务器安全程度. 配置 生成 ...

  6. 【题解】Luogu P5471 [NOI2019]弹跳

    原题传送门 先考虑部分分做法: subtask1: 暴力\(O(nm)\)枚举,跑最短路 subtask2: 吧一行的点压到vector中并排序,二分查找每一个弹跳装置珂以到达的城市,跑最短路 sub ...

  7. 高性能MYSQL(查询优化)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  8. Spring Boot 主从读写分离

    自己封装了一个读写分离的 Starter,可以配置任意多个数据源,使用 Hikari 连接池(暂不支持其他连接池). GitHub:rw-separate-spring-boot-starter 代码 ...

  9. javascript中五种迭代方法实例

    温习一下js中的迭代方法. <script type="text/javascript"> var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]; ...

  10. 豆瓣Top250

    """ 爬取豆瓣电影TOP250 - 完整示例代码 """ import codecs import requests from bs4 i ...