javaweb深入学习001--Web请求过程

时间:2021-07-05 13:20:57
  • Web请求过程
 一:几个不变的原则: 1、互联网上所有的资源都对应着自身的URL(统一资源定位符),一如每个人的身份证号一样每个资源的URL也是是唯一的! 2、浏览器发出的服务请求是HTTP请求 3、所有的数据都是在浏览器中获得展示的,服务器找到浏览器请求的资源,并以字节流的方式发送给浏览器,浏览器得到数据后将数据解析显示出来。
二 :服务请求的简要过程: 1、用户在浏览器的地址栏中输入主机域名,例如:www.csdn.com 2、浏览器需要将域名解析为对应的IP地址。域名到对应IP地址的解析过程为(简要过程):       浏览器进程调用解析程序(resolver),并成为DNS的一个客户,把带解析的域名存放在DNS请求报文中(请求以UDP用户数据报方式发送给本地域名服务器)。本地域名服务器查找域名对应的IP地址(本地域名服务器查找失败时会向*域名服务器发起查找请求......),并将对应的IP地址放在回答报文段中返回。浏览器获得目的主机的IP地址之后即可进行下一步通信。 3、浏览器与服务器建立TCP连接(IP地址+默认端口号:80)。 4、浏览器发起一个GET请求。 5、服务器收到浏览器请求,给出相应的响应(服务处理请求的过程是一个可简单可复杂的处理过程,稍后在详细介绍)。 6、释放TCP连接。 7、浏览器获得服务器返回的数据,并进行解析和显示。
  • HTTP(Hyper Text Transfer Protocol
一:一些必要的介绍        1、HTTP是一个应用层协议,使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输。HTTP协议不用考虑数据传输过程中的丢包和重传等问题。但是HTTP协议本身是无连接的(也即是:通信的双方在交换HTTP报文之前不需要先建立HTTP连接),更详细请参考【RFC2616】规范
2、HTTP协议是无状态的,也即:同一个用户第二次访问同一个服务器上的页面时,服务器响应与第一次被访问时的相同。(这就产生了cookie和Session机制) 3、HTTP协议是面向文本的,报文中的每一个字段都是一个 ASCII 码串。 4、HTTP协议请求响应时间:        HTTP协议首先要和服务器建立TCP连接,这需要三次握手。当三次握手的前两部分完成后(即经过一个RTT时间后)客户端(浏览器)就把HTTP请求报文作为三次握手的第三个报文的数据发送给服务器。服务器收到HTTP请求报文之后,就把所请求的资源文档作为响应报文返回给客户。由此可以知道:请求一个文档的时间和文档资源的大小是成正比的,用时 = 文档传输时间 + 两倍往返时间 RTT (一个 RTT 用于连接 TCP 连接,另一个 RTT 用于请求和接受服务器响应)。 5、HTTP协议的主要版本: HTTP/1.0 :主要缺点:每个请求都需要两倍的RTT开销,若一个网页上有很多的链接对象(如图片,CSS文件等等)需要依次进行链接,那么每一个链接下载都将导致 2 x RTT的时间开销。同时每次TCP连接的建立都需要消耗一定服务器资源,加重了服务器的压力。(现代浏览器都具备并行打开5-10个TCP连接的能力,而每一个TCP连接处理客户的一个请求,使用并行TCP连接可以缩短响应时间,该功能可以借助第三方插件进行观察) HTTP/1.1:有效的解决了1.0版本的问题,1.1版本中采用了持续连接(服务器在发送回响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文)。1.1协议的持续连接方式有两种:非流水线式和流水线式;非流水线式特点:客户只用在收到前一个响应之后才能发出下一个请求(较1.0版本节约了一个 RTT 时间,仍然存在服务器资源的浪费,因为服务器发送完一个对象后TCP连接就处于空闲状态了)。流水线式特点:用户在收到响应报文前就可以发出新的请求报文(客户端访问所有对象只需要花费一个 RTT 时间)。
二: HTTP 的报文结构: 1、HTTP报文分为两类: 请求报文:从客户端向服务器端发送请求报文 响应报文:从服务器端到客户端的回答 2、HTTP的请求和响应报文都由三个部分组成。两种报文格式的区别就是开始行不同 (1)开始行 :用于区别是请求报文还是响应报文,在请求报文中开始行叫做请求行(Request-Line),在响应报文中开始行叫做状态行(Status-Line)。 请求行的组成由“三个内容” 组成,即:方法、请求资源的URL、HTTP版本 。常用的方法有 GET 和 POST 例如: GET http://www.csdn.com/index HTTP/1.1 (“三个内容”之间用空格 " " 隔开的 (2)首部行:用来说明浏览器、服务器和报文主体的一些信息,首部行可以是好几行也可以没有。 在每一个首部行中都有首部字段名和它的值,每一行结束的地方要有”回车“和”换行“。整个首部结束时,还有一个空行将首部行和后面的实体主体区别开。 (3)实体主体:在请求报文中一般不使用这一字段,响应报文中也可能没有。 请求报文段示例: GET /index HTTP/1.1    ---- {请求使用了相对的URL} Host: www.csdn.com----{首部行的开始,给出了主机域名} Connection: close----{告诉服务器发送完请求文档后就可以释放连接了} User-Agent:Mozilla/17----{表示用户使用的浏览器类型和版本} Accept-language: cn----{表示用户希望优先获得的文档的语言类型} [请求报文的最后还有一个空行] ----{这个请求报文并没有实体主体} 3、响应报文的响应状态码: 响应状态码分为 5 类 33 种: 1xx : 表示通知信息,如接受到了或是正在处理 2xx :表示成功,如接受到了或是知道了 3xx :表示重定向 4xx :表示客户端错误,如请求的URL不正确 5xx :表示服务器的错误,如服务器压力过大无法完成请求响应