java wed ,&&和|| 判断,会对重定向产生印象吗?

《http协议的几个重要概念》:





接着开始发请求消息,例如发送以下请求消息请求baidu的首页消息,使用的HTTP协议为HTTP/

l         GET方式:是以实体的方式获得由请求URI所指定资源的信息,若是请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。

l         POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它看成请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:

1:对现有资源的解释;

2:向电子公告栏、新闻组、邮件列表或相似讨论组发信息;

4:经过附加操做来扩展数据库 。

从上面描述能够看出,Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。

GET与POST方法有如下区别:

(3)   安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,若是这些数据是中文数据并且是非敏感数据,那么使用 get;若是用户输入的数据不是中文字符并且包含敏感数据,那么仍是使用 post为好。

(4)   安全的和幂等的。所谓安全的意味着该操做用于获取信息而非修改信息。幂等的意味着对同一 URL 的多个请求应该返回一样的结果。完整的定义并不像看起来那样严格。换句话说,GET 请求通常不该产生反作用。从根本上讲,其目标是当用户打开一个连接时,她能够确信从自身的角度来看没有改变资源。好比,新闻站点的头版不断更新。虽然第二次请求会返回不一样的一批新闻,该操做仍然被认为是安全的和幂等的,由于它老是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该经过 POST 请求实现,由于在注解提交以后站点已经不一样了(比方说文章下面出现一条注解)。

HTTP最多见的请求头以下:

1.1默认进行持久链接),它就能够利用持久链接的优势,当页面包含多个元素时(例如Applet,图片),显著地减小下载所须要的时间。要实现这一点,Servlet须要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,而后在正式写出内容以前计算它的大小;

HTTP最多见的响应头以下所示:

实体头用坐实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效性等。

在HTTP消息中,也可使用一些再HTTP1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或者扩展头,他们一般被看成是一种实体头处理。

《HTTP请求(GET和POST区别)和响应》:

《HTTP请求头概述_百度知道》:

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所作的努力。

Session能够用Cookie来实现,也能够用URL回写的机制来实现。用Cookie来实现的Session能够认为是对Cookie更高级的应用。

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每个请求发送至同一个服务器。Cookie最先在RFC2109中实现,后续RFC2965作了加强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并无在HTTP的协议中定义;

3)Session是针对每个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪一个用户session变量,这个值是经过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来讲:当你访问一个使用session 的站点,同时在本身机子上创建一个cookie,建议在服务器端的SESSION机制更安全些.由于它不会任意读取客户存储的信息。

Session机制是一种服务器端的机制,服务器使用一种相似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序须要为某个客户端的请求建立一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,若是已包含一个session id则说明之前已经为此客户端建立过session,服务器就按照session id把这个 session检索出来使用(若是检索不到,可能会新建一个),若是客户端请求不包含session id,则为此客户端建立一个session而且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

服务器给每一个Session分配一个惟一的JSESSIONID,并经过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器可以找到这个客户端对应的Session。

URL回写是指服务器在发送给浏览器页面的全部连接中都携带JSESSIONID的参数,这样客户端点击任何一个连接都会把JSESSIONID带会服务器。

若是直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

1)Session超时:Session在指定时间内失效,例如30分钟,若在30分钟内没有操做,则Session会失效,例如在web.xml中进行了以下设置:

1)Cookie:客户端将服务器设置的Cookie返回到服务器;

服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

WEB缓存(cache)位于Web服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:若是是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

HTTP协议定义了相关的消息头来使WEB缓存尽量好的工做。

q      减小相应延迟:由于请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。

q      减小网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户能够节省带宽费用,控制带宽的需求的增加并更易于管理。

3.2.3与缓存相关的HTTP扩展消息头

3.2.4客户端缓存生效的常见流程

服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端须要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器经过这两个头判断本地资源未发生变化,客户端不须要从新下载,返回304响应。常见流程以下图所示:

HTTP/1.1中缓存的目的是为了在不少状况下减小发送请求,同时在许多状况下能够不须要发送完整响应。前者减小了网络回路的数量;HTTP利用一个“过时(expiration)”机制来为此目的。后者减小了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。

HTTP定义了3种缓存机制:

1)Freshness:容许一个回应消息能够在源服务器不被从新检查,而且能够由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;

2)Validation:用来检查以一个缓存的回应是否仍然可用。例如,若是一个回应有一个Last-Modified回应头,缓存可以使用If-Modified-Since来判断是否已改变,以便判断根据状况发送请求;

3)Invalidation 在另外一个请求经过缓存的时候,经常有一个反作用。例如,若是一个URL关联到一个缓存回应,可是其后跟着POST、PUT和DELETE的请求的话,缓存就会过时。

3.3 断点续传和多线程下载的实现原理

q      在链接断开重连时,客户端只请求该资源未下载的部分,而不是从新请求整个资源,来实现断点续传。

客户端经过并发的请求相同资源的不一样片断,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的FlashGet和迅雷基本都是这个原理。

有两种基本的加解密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥没法推知私钥,根据私钥也没法推知公钥),加密解密使用不一样密钥(公钥加密须要私钥解密,私钥加密须要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

https通讯的优势:

1)客户端产生的密钥只有客户端和服务器端能获得;

2)加密的数据只有客户端和服务器端才能获得明文;

3)客户端到服务端的通讯是安全的。

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。

代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它以后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所须要的信息并传送给你的浏览器。

并且,大部分代理服务器都具备缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,若是浏览器所请求的数据在它本机的存储器上已经存在并且是最新的,那么它就不从新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提升浏览速度和效率。

更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工做主要在开放系统互联(OSI)模型的对话层。

1)突破自身IP访问限制,访问国外站点。如:教育网、169网等网络用户能够经过代理访问国外网站;

2)访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的容许访问范围以内),使用教育网内地址段免费代理服务器,就能够用于对教育 网开放的各种FTP下载上传,以及各种资料查询共享等服务;

3)突破中国电信的IP封锁:中国电信用户有不少网站是被限制访问的,这种限制是人为的,不一样Serve对地址的封锁是不一样的。因此不能访问时能够换一个国 外的代理服务器试试;

4)提升访问速度:一般代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息经过时,同时也将其保存到缓冲区中,当其余用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提升访问速度;

5)隐藏真实IP:上网者也能够经过这种方法隐藏本身的IP,免受攻击。

对于客户端浏览器而言,http代理服务器至关于服务器。

而对于Web服务器而言,http代理服务器又担当了客户端的角色。

3.6.1什么是虚拟主机

虚拟主机:是在上划分出必定的磁盘空间供用户放置、应用组件等,提供必要的站点功能与数据存放、传输功能。  

所谓虚拟主机,也叫“”就是把一台运行在互联网上的服务器划分红多个“虚拟”的服务器,每个虚拟主机都具备独立的和完整的Internet服务器(支持、、等)功能。一台服务器上的不一样虚拟主机是各自独立的,并由用户自行管理。但一台服务器主机只可以支持必定数量的虚拟主机,当超过这个数量时,用户将会感到性能急剧降低。

3.6.2虚拟主机的实现原理

虚拟主机是用同一个WEB服务器,为不一样域名网站提供服务的技术。Apache、Tomcat等都可经过配置实现这个功能。

客户端发送HTTP请求的时候,会携带Host头,Host头记录的是客户端输入的域名。这样服务器能够根据Host头确认客户要访问的是哪个域名

//第二种情况,先增加Cookie后转发,A2.jsp获取不了name的值,需要刷新A2.jsp或者其他网址都能正常获取name

//第三种情况,先重定向后增加Cookie,无论怎么刷新就获取不了值,就是根本没写入cookie

//第四种情况,先转发后增加Cookie,无论怎么刷新就获取不了值,就是根本没写入cookie

//第五种情况,先重定向后设置session对象值,A2.jsp能正常获取name的值"你好"

//第六种情况,先转发后设置session对象值,需要刷新A2.jsp或者其他网址都能正常获取name

//第七种情况,先设置session对象值后重定向,A2.jsp能正常获取name的值"你好"

//第八种情况,先设置session对象值后重定向,A2.jsp能正常获取name的值"你好"

我对重定向,转发,Cookie,session比较乱,希望大家能逐个解释以上8个现象

注:不要只给我解释重定向和转发的概念,是要详细解释上面8个现象

  • 首行是状态行包括:HTTP版本,状态码,状态描述,后面跟一个CRLF
  • 首行之后是若干行响应头,包括:通用头部,响应头部,实体头部
  • 响应头部和响应实体之间用一个CRLF空行分隔
  • 最后是一个可能的消息实体 响应报文例子如下:

3. HTTP常见状态码及其含义

    • 100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
    • 201 Created 请求成功并且服务器创建了新的资源
    • 202 Accepted 服务器已接受请求,但尚未处理
    • 304 Not Modified 自从上次请求后,请求的网页未修改过。
    • 400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

4. 常见web安全及防护

  • 参考:常见web攻击及防护方法[18]

  1. 长连接,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接,可有效减少TCP的三次握手开销;
  2. 缓存处理,增加了Cache-Control等缓存相关头(看下面详细介绍);
  3. 请求头增加Host,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  4. 请求头增加range可用于断点续传,它支持只请求资源的某个部分,可用于断点续传
  5. 新增了24个状态码,(如100Continue,发请求体之前先用请求头试探一下服务器,再决定要不要发请求体
  1. 多路复用,多个请求都在同一个TCP连接上完成
  2. 报文头部压缩,HTTP2.0可以维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量

用于判断强缓存,也就是是否直接取在客户端缓存文件,不请求后端。

请求头和响应头都可以使用。

  • no-cache:不使用本地缓存。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。
  • no-store:直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。
  • public:可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。
  • private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。
  • max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

  • 通信使用未加密的明文,内容容易被窃取
  • 不验证通信方的身份,容易遭遇伪装
  • 无法验证报文的完整性,容易被篡改

https就是为了解决上述http协议的安全性问题诞生的。https并非是应用层的新协议,是基于http协议的,将http和tcp协议接口部分用SSLTLS协议代替而已。

对称加密:用同一个密钥加密、解密。常用对称加密算法:AES,RC4,3DES 非对称加密:用一个密钥加密的数据,必须使用另一个密钥才能解密。常用非对称加密算法:RSA,DSA/DSS

其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。

由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。

非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。

§ CA 证书包含的信息:

§ https加密通信的流程:

  1. 浏览器输入url请求网站,并附带自己支持的一套加密规则。
  2. 网站制作证书,这个应该是网站建站的时候就已经弄好了。证书分为服务器证书和客户端证书,我们所说的证书一般都是指服务器证书(ssl证书详细解读[20])。制作过程如下:
    1. 制作CSR文件。就是制作Certificate Secure Request证书请求文件,制作过程中,系统会产生2个密钥,一个是公钥就是这个CSR文件,另一个是私钥,存在服务器上。
    2. CA认证。将CSR文件提交给CA,一般有两种认证方式:域名认证 和 企业文档认证。
    3. 证书安装。收到CA证书后,将证书部署在服务器上。
  3. 网站从浏览器发过来的加密规则中选一组自身也支持的加密算法和hash算法,并向浏览器发送带有公钥的证书,当然证书还包含了很多信息,如网站地址、证书的颁发机构、过期时间等。
    1. 验证证书的合法性。如颁发机构是否合法、证书中的网站地址是否与访问的地址一致,若不合法,则浏览器提示证书不受信任,若合法,浏览器会显示一个小锁头。
    2. 若合法,或用户接受了不合法的证书,浏览器会生成一串随机数的密码(即密钥),并用证书中提供的公钥加密。
    3. 使用约定好的hash计算握手消息,并使用生成的随机数(即密钥)对消息进行加密,最后将之前生成的所有消息一并发送给网站服务器。
  4. 网站服务器解析消息。用已有的私钥将密钥解密出来,然后用密钥解密发过来的握手消息,并验证是否跟浏览器传过来的一致。然后再用密钥加密一段握手消息,发送给浏览器。
  5. 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。

下图表示https加密通信的过程:

  • 常用设计模式分类[21]

  • 参考:Git常用操作指南[35]








§ git rebase 作用:将一个分支的更改合并入另一个分支。

  1. 让多个人在同一个分支开发的提交节点形成一条线,而不是多条线
  2. 让你提交的commit在该分支的最前面
  1. 开发分支合并主分支的更新;
  2. 不能在主分支上使用rebase,因为会破坏历史记录

§ merge 和 rebase 的区别 git rebase和git merge做的事其实是一样的。它们都被设计来将一个分支的更改并入另一个分支,只不过方式有些不同。

  • git merge 将两个分支的提交记录按照顺序排序
  • git rebase 把被合并的旁分支的修改直接追加在主分支提交记录后面。

  • 你最大的优点和缺点是什么?
  • 你为什么会选择这个行业,职位?
  • 你觉得你适合从事这个岗位吗?
  • 未来三到五年的规划是怎样的?
  • 你的项目中技术难点是什么?遇到了什么问题?你是怎么解决的?
  • 你们部门的开发流程是怎样的
  • 你认为哪个项目做得最好?
  • 说下工作中你做过的一些性能优化处理?
  • 最近在看哪些前端方面的书?
  • 平时是如何学习前端开发的?
  • 你最有成就感的一件事?
  • 你为什么要离开前一家公司?
  • 你希望通过这份工作获得什么?
  • 面试完你还有什么问题要问的吗?

  • 与vue2和3搭配使用的姿势
  • jwt、cookie登录态校验、公司项目前后端部署方式、虚拟化简单了解
  1. 感谢阅读,欢迎分享给身边的朋友,

  2. 记得关注噢,黑叔带你飞!

亲,点这涨工资 

我要回帖

更多关于 java web 的文章

 

随机推荐