HTTP工作原理
2015-07-08 17:31
471 查看
HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。
以下是 HTTP 请求/响应的步骤:
● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;
● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
● 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP 连接;
6、浏览器将该 html 文本并显示内容;
HTTP 无状态性
HTTP 协议是无状态的(stateless)。也就是说,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过,服务器也无法分辨不同的客户端。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求。
HTTP 持久连接
HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销。因为同一个页面可能存在多个对象,所以非持久连接可能使一个页面的下载变得十分缓慢,而且这种短连接增加了网络传输的负担。HTTP1.1 使用持久连接keepalive,所谓持久连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,允许在同一个连接中存在多次数据请求和响应,即在持久连接情况下,服务器在发送完响应后并不关闭TCP 连接,而客户端可以通过这个连接继续请求其他对象。
HTTP/1.1 协议的持久连接有两种方式:
● 非流水线方式:客户在收到前一个响应后才能发出下一个请求;
● 流水线方式:客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文;
以下是 HTTP 请求/响应的步骤:
● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;
● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
● 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP 连接;
6、浏览器将该 html 文本并显示内容;
HTTP 无状态性
HTTP 协议是无状态的(stateless)。也就是说,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过,服务器也无法分辨不同的客户端。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求。
HTTP 持久连接
HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销。因为同一个页面可能存在多个对象,所以非持久连接可能使一个页面的下载变得十分缓慢,而且这种短连接增加了网络传输的负担。HTTP1.1 使用持久连接keepalive,所谓持久连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,允许在同一个连接中存在多次数据请求和响应,即在持久连接情况下,服务器在发送完响应后并不关闭TCP 连接,而客户端可以通过这个连接继续请求其他对象。
HTTP/1.1 协议的持久连接有两种方式:
● 非流水线方式:客户在收到前一个响应后才能发出下一个请求;
● 流水线方式:客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文;
相关文章推荐
- libevent网络编程例子(1)
- TCP/IP
- Linux tcpdump命令详解
- win7 不能访问共享文件--误代码0x80070035找不到网络路径
- curl HTTP请求基本操作
- 错误:HttpServlet was not found on the Java
- 《译文》借助OCR和神经网络,用JavaScript识别验证码
- CNN卷积神经网络
- TCP/IP、Http、Socket的区别
- 安全地使用HttpContext.Current
- 加载网络图片
- 黑马程序员——java基础---网络编程
- openssl nodejs https+客户端证书+usbkey
- 好用的http工具
- CocoaPods安装和使用教程:出处:http://code4app.com/article/cocoapods-install-usage
- 2015湖南省选集训DAY5——work(BZOJ4177)
- HttpClient抓取网页内容简单介绍
- 网络运营为何而生?
- 黑马程序员—Java网络编程
- HttpClient 源码解读