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

本文介绍了Web请求的基本流程,包括浏览器如何通过DNS解析获取IP地址、与服务器建立TCP连接及发送HTTP请求等。此外,还详细解释了HTTP协议的工作原理、版本差异以及报文结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 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 :表示服务器的错误,如服务器压力过大无法完成请求响应


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值