`

Http请求及响应全过程

阅读更多
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
分享到:
评论

相关推荐

    http协议请求响应详解

    在HTTP1.0中,每一次新的页面访问都需要重新建立TCP连接,这意味着对于每一个页面的访问,都会经历连接建立、数据传输、连接关闭的全过程。这种方式虽然简单,但在高并发访问下效率较低。 #### 三、HTTP1.1的特点 ...

    第5章 HTTP请求、响应及状态管理

    详细讲解http请求、相应、及其状态管理的全过程,内容简单易懂。

    一、浏览器渲染原理(进程、线程)http请求全过程-浏览器输入url整个过程

    1.2 浏览器发送 HTTP 请求的流程(B/S模式)(注意:http协议是基于tcp/ip协议的,http协议是应用层协议,tcp/ip协议是通信层协议,也就是tcp提供的是通信的管道。) 简要来说,很多网站第二次访问能够秒开,是因为...

    Linux下用c语言实现发送http请求

    在Linux环境下利用C语言实现HTTP请求的发送是一个深入理解网络编程和HTTP协议的好机会。本文将根据提供的代码片段,详细解析如何在Linux下使用C语言实现HTTP请求的发送,包括必要的头文件、函数定义以及主函数中的...

    servlet编写、部署、运行全过程

    ### Servlet编写、部署、运行全过程详解 #### 一、Servlet基础知识概述 在开始详细介绍Servlet的编写、部署与运行过程之前,我们首先需要了解一些基本概念。 - **Servlet**:Servlet是一种Java技术,它用于扩展...

    浅谈flask源码之请求过程

    1. 创建上下文(Context):Flask通过environ字典创建请求上下文,该字典包含了所有HTTP请求的信息。 2. 上下文入栈(Push):将创建的上下文压入栈中,为请求处理准备环境。 3. 分发请求(Dispatch Request):根据...

    http请求处理流程(讲的很清楚).docx

    这个流程解释了ASP.NET如何从接收到HTTP请求开始,到生成并发送响应的全过程。开发者可以通过自定义HttpModule和HttpHandler来拦截和处理请求,实现诸如日志记录、性能监控、安全控制等功能。了解这个流程对于优化...

    计算机网络实验7 - WEB 页面请求全历程协议及数据包解析(综合性实验)

    在本实验中,学生将深入理解计算机网络中的Web页面请求全过程,包括协议交互和数据包解析。实验的主要目的是让学生能够捕获和分析网络数据包,理解HTTP和DNS协议的工作原理,以及TCP连接的建立和终止过程。 首先,...

    C++实现POST请求

    本文详细介绍了如何使用 C++ 来实现 HTTP POST 请求,从初始化 Winsock 到构建请求字符串,再到发送请求及接收响应的全过程。这种实现方式适用于简单的客户端程序,但对于更复杂的应用场景,建议使用成熟的网络库,...

    PB调用http apiPB解析json

    综上所述,这个主题涵盖了从PowerBuilder中发起HTTP请求,处理不同类型的API调用,解析JSON数据并将其整合到应用程序的数据源中的全过程。理解这些技术点对于在PB环境中开发与Web服务交互的应用程序至关重要。

    STM32_W5500_HTTP例程_STM32_W5500_HTTP例程_w5500

    - 发送HTTP请求:根据需要构建GET或POST请求报文,并通过W5500发送出去。 - 接收HTTP响应:监听网络接口,接收服务器返回的数据。 - 解析响应数据:处理接收到的数据,如提取HTML内容、处理状态码等。 - 关闭连接:...

    Ruby-HttpLogHTTP请求日志输出

    HttpLog通过提供详细的日志输出,使得追踪HTTP请求的全过程变得更加容易。 首先,我们来了解一下HttpLog的基本用法。在Ruby项目中,你可以通过Gemfile引入HttpLog库,然后在代码中进行初始化。添加以下代码到...

    asp.net 请求输入到输出的全过程及httpHandler和httpModuler详细介绍

    ***请求处理机制是一个复杂而精密的过程,涉及到IIS(Internet Information Services)与.NET框架之间的交互,以及HTTP请求生命周期中的各个环节。HTTP请求从用户输入的地址开始,到达服务器后,IIS作为主要的Web...

    完整购物网站,前端页面使用html+css+js(结合jquery)进行开发,后端使用servlet进行对前端请求的响应

    总的来说,这个项目为学习Java Web开发提供了很好的实践素材,涵盖了从静态页面到动态交互、数据库操作以及后端服务响应的全过程,对于理解Web应用的工作原理和开发流程非常有帮助。同时,它也适用于毕业设计或课程...

    javaweb全站请求编码过滤器

    在Java Web开发中,"全站...学习过程中,你将掌握如何分析HTTP请求,如何编写和配置Filter,以及如何调试和优化过滤器代码,提升你的Java Web开发技能。记得实践是检验真理的唯一标准,动手操作才能真正掌握这些知识。

    HTTP协议和WEB服务器工作原理

    WEB服务器处理客户端请求全过程 - **客户端发起请求**:客户端通过HTTP协议向服务器发送请求。 - **服务器接收请求**:服务器通过`ServerSocket`监听并接收客户端的连接请求。 - **创建连接**:服务器为每个连接...

    c# http接口设计及调用demo

    综上所述,"c# http接口设计及调用demo"涵盖了从创建HTTP服务到客户端调用的全过程,包括使用C#的Web API框架设计接口,使用HttpClient进行请求,以及数据的JSON格式交换。在实际项目中,这些知识是实现前后端分离、...

    网络游戏-监控网络请求的方法及装置.zip

    综上所述,“监控网络请求的方法及装置”是网络游戏开发和运维的重要组成部分,它涵盖了从数据捕获到分析的全过程,对游戏的性能、安全性和用户体验有深远影响。通过持续监控和优化网络请求,开发者可以构建出更加...

Global site tag (gtag.js) - Google Analytics