HTTP请求及响应过程
一、Http请求及响应过程总体介绍
第一步:解析域名,即解析输入框中的请求地址;
第二步:发起三次握手;
第三步:建立TCP连接后,发起Http请求;
第四步:服务器端接收请求并解析,处理请求后响应给客户端
第五步:客户端解析响应页面请求并进行页面渲染
二、Http请求及响应过程步骤解析(以谷歌浏览器为例)
第一步:解析域名
1、首先浏览器搜索自身的DNS缓存,查看缓存中是否有输入框中的请求地址并且缓存未过期,如果存在,则解析完成;否则,则进行下一步操作。
注:查看Chrome浏览器自身的缓存:chrome://net-internals/#dns
2、如果浏览器自身的缓存里面没有找到对应的请求地址,那么浏览器会搜索操作系统自身的DNS缓存。如果找到且缓存信息没有过期,则解析完成;否则进行下一步操作。
注:查看Windows操作系统自身的DNS缓存,可以在命令行下使用 ipconfig /displaydns
3、 如果系统缓存中没有请求地址信息,那么浏览器会尝试读取(Windows)hosts文件(位于C:\Windows\System32\drivers\etc),如果有则解析完成。
4、如果host文件中也没有请求地址的信息,浏览器会会向本地配置的首选DNS服务器发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址)。
5、如果上一步失败了,操作系统就会查找NetBIOS name Cache进行解析。如果成功,则解析完成,否则就进行下一步。
6、如果上一步也没有成功,那会查询WINS 服务器(NETBIOS名称和IP地址对应的服务器)
7、如果上一步也没有查询成功,那么客户端就要进行广播查找。
8、 如果上一步也没有成功,那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)
9、如果第八步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这八步中有一步可以解析成功,那就可以成功和目标计算机进行通信。
第二步:发起三次握手
获取到解析后的域名后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。连接请求通过路由设备进入到网卡,然后是进入到内核的TCP/IP协议栈(有可能要经过Netfilter防火墙),最终到达WEB程序,建立了TCP/IP的连接。
三次握手协议如图所示:
1) Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包),这时候Client进入syn_sent状态,表示客户端等待服务器的回复
2) Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq = y 表示Server 自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。
3) Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个包),Client自己的序号seq= x + 1(表示这就是我的第1个包,相对于第0个包来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。
第三步:发起HTTP请求
在三次握手成功之后,客户端向服务器发起HTTP请求。
HTTP请求报文内容如下:
请求行:如 GET /index.html HTTP/1.1 (请求的方法 请求的URL 请求所使用的协议/请求协议的版本)
请求头:User-Agent Host等成对出现的值
请求体
空行
消息体
第四步:服务器端处理请求并响应
服务器解析客户端发起的HTTP请求并处理,以报文的形式响应给客户端。
1)HTTP响应报文内容如下:
状态行:如 HTTP/1.1 200 OK (请求所使用的协议/请求协议的版本 响应状态 状态说明)
响应头:如 Content-Type:text/json;charset=UTF-8 ...
空行
消息体
2)响应状态码及其含义
1xx: 信息性状态码 100, 101
2xx: 成功状态码 200:OK
3xx: 重定向状态码
301: 永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向;
302: 临时重定向,显式重定向, Location响应首部的值为新的URL
304:Not Modified 未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码,告诉浏览器,你不用请求该资源,直接使用本地的资源即可。
4xx: 客户端错误状态码
404: Not Found 请求的URL资源并不存在
5xx: 服务器端错误状态码
500: Internal Server Error 服务器内部错误
502: Bad Gateway 前面代理服务器联系不到后端的服务器时出现
504:Gateway Timeout 这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应
第五步:客户端解析响应页面并渲染
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但显示的顺序并不一定是代码里面的顺序。浏览器再一次请求静态资源时,那么浏览器会直接读取本地的该资源的缓存文件。
详细的浏览器工作原理请参考:http://kb.cnblogs.com/page/129756/
附图:Chrome浏览器下,Http请求内容
本篇博客参考自 http://blog.51cto.com/linux5588/1351007
- 大小: 525 KB
- 大小: 99.1 KB
分享到:
相关推荐
在HTTP1.0中,每一次新的页面访问都需要重新建立TCP连接,这意味着对于每一个页面的访问,都会经历连接建立、数据传输、连接关闭的全过程。这种方式虽然简单,但在高并发访问下效率较低。 #### 三、HTTP1.1的特点 ...
详细讲解http请求、相应、及其状态管理的全过程,内容简单易懂。
内容概要:本文全面解析了Django框架运行时项目启动方式(runserver、uWSGI等)及其处理HTTP请求的具体流程,包括请求进入后经由各个中间件的处理直至响应结果返回整个链条。文中还重点介绍了中间件的工作机制、URL...
1.2 浏览器发送 HTTP 请求的流程(B/S模式)(注意:http协议是基于tcp/ip协议的,http协议是应用层协议,tcp/ip协议是通信层协议,也就是tcp提供的是通信的管道。) 简要来说,很多网站第二次访问能够秒开,是因为...
在Linux环境下利用C语言实现HTTP请求的发送是一个深入理解网络编程和HTTP协议的好机会。本文将根据提供的代码片段,详细解析如何在Linux下使用C语言实现HTTP请求的发送,包括必要的头文件、函数定义以及主函数中的...
### Servlet编写、部署、运行全过程详解 #### 一、Servlet基础知识概述 在开始详细介绍Servlet的编写、部署与运行过程之前,我们首先需要了解一些基本概念。 - **Servlet**:Servlet是一种Java技术,它用于扩展...
1. 创建上下文(Context):Flask通过environ字典创建请求上下文,该字典包含了所有HTTP请求的信息。 2. 上下文入栈(Push):将创建的上下文压入栈中,为请求处理准备环境。 3. 分发请求(Dispatch Request):根据...
这个流程解释了ASP.NET如何从接收到HTTP请求开始,到生成并发送响应的全过程。开发者可以通过自定义HttpModule和HttpHandler来拦截和处理请求,实现诸如日志记录、性能监控、安全控制等功能。了解这个流程对于优化...
在本实验中,学生将深入理解计算机网络中的Web页面请求全过程,包括协议交互和数据包解析。实验的主要目的是让学生能够捕获和分析网络数据包,理解HTTP和DNS协议的工作原理,以及TCP连接的建立和终止过程。 首先,...
本文详细介绍了如何使用 C++ 来实现 HTTP POST 请求,从初始化 Winsock 到构建请求字符串,再到发送请求及接收响应的全过程。这种实现方式适用于简单的客户端程序,但对于更复杂的应用场景,建议使用成熟的网络库,...
综上所述,这个主题涵盖了从PowerBuilder中发起HTTP请求,处理不同类型的API调用,解析JSON数据并将其整合到应用程序的数据源中的全过程。理解这些技术点对于在PB环境中开发与Web服务交互的应用程序至关重要。
HttpLog通过提供详细的日志输出,使得追踪HTTP请求的全过程变得更加容易。 首先,我们来了解一下HttpLog的基本用法。在Ruby项目中,你可以通过Gemfile引入HttpLog库,然后在代码中进行初始化。添加以下代码到...
***请求处理机制是一个复杂而精密的过程,涉及到IIS(Internet Information Services)与.NET框架之间的交互,以及HTTP请求生命周期中的各个环节。HTTP请求从用户输入的地址开始,到达服务器后,IIS作为主要的Web...
总的来说,这个项目为学习Java Web开发提供了很好的实践素材,涵盖了从静态页面到动态交互、数据库操作以及后端服务响应的全过程,对于理解Web应用的工作原理和开发流程非常有帮助。同时,它也适用于毕业设计或课程...
在Java Web开发中,"全站...学习过程中,你将掌握如何分析HTTP请求,如何编写和配置Filter,以及如何调试和优化过滤器代码,提升你的Java Web开发技能。记得实践是检验真理的唯一标准,动手操作才能真正掌握这些知识。
WEB服务器处理客户端请求全过程 - **客户端发起请求**:客户端通过HTTP协议向服务器发送请求。 - **服务器接收请求**:服务器通过`ServerSocket`监听并接收客户端的连接请求。 - **创建连接**:服务器为每个连接...
- 发送HTTP请求:根据需要构建GET或POST请求报文,并通过W5500发送出去。 - 接收HTTP响应:监听网络接口,接收服务器返回的数据。 - 解析响应数据:处理接收到的数据,如提取HTML内容、处理状态码等。 - 关闭连接:...
综上所述,"c# http接口设计及调用demo"涵盖了从创建HTTP服务到客户端调用的全过程,包括使用C#的Web API框架设计接口,使用HttpClient进行请求,以及数据的JSON格式交换。在实际项目中,这些知识是实现前后端分离、...