HTTP请求的完全过程

1.1 浏览器根据域名解析IP地址

浏览器根据访问的域名找到其IP地址。DNS查找过程如下:

  1. 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否是有域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
  2. 系统缓存:如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。
  3. 路由器缓存:如果系统缓存也没有找到,则会向路由器发送查询请求。
  4. ISP(互联网服务提供商) DNS缓存:如果在路由缓存也没找到,最后要查的就是ISP缓存DNS的服务器。

1.2 浏览器与WEB服务器建立一个TCP连接

TCP的3次握手。

1.3 浏览器给WEB服务器发送一个HTTP请求

一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。

1.3.1 请求行

请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。例如,GET /index.html HTTP/1.1。

1.请求方法

HTTP/1.1 定义的请求方法有8种:GET(完整请求一个资源)、POST(提交表单)、PUT(上传文件)、DELETE(删除)、PATCH、HEAD(仅请求响应首部)、OPTIONS(返回请求的资源所支持的方法)、TRACE(追求一个资源请求中间所经过的代理)。最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

(1)GET

当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,会送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号‘?’代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。通过GET方式传递的数据直接放在地址中,所以GET方式的请求一般不包含“请求内容”部分,请求数据以地址的形式表现在请求行。地址中‘?’之后的部分就是通过GET发送的请求数据,各个数据之间用‘&’符号隔开。显然这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一半最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。如果数据是英文字母/数字,原样发送;如果是空格,转换为+;如果是中文/其他字符,则直接把字符串用BASE64加密,得出:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

(2)POST

允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。POST方式请求行中不包含数据字符串,这些数据保存在“请求内容”部分,各数据之间也是使用‘&’符号隔开。POST方式大多用于页面的表单中。因为POST也能完成GET的功能,因此多数人在设计表单的时候一律都使用POST方式,其实这是一个误区。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。

2.URL

URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。

组成:<协议>://<主机>:<端口>/<路径>

端口和路径有事可以省略(HTTP默认端口号是80)

3.协议版本

协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

1.3.2 请求头部

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。

请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。

1.3.3 请求数据

请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length。下面是一个POST方法的请求报文:

POST  /index.php HTTP/1.1    请求行

Host: localhost

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2  请求头

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip, deflate

Connection: keep-alive

Referer: http://localhost/

Content-Length:25

Content-Type:application/x-www-form-urlencoded

  空行

username=aa&password=1234  请求数据

1.4 服务器端响应HTTP请求,浏览器得到HTML代码

HTTP响应报文由状态行(status line)、相应头部(headers)、空行(blank line)和响应数据(response body)4个部分组成。

1.4.1 状态行

状态行由3部分组成,分别为:协议版本、状态码、状态码扫描。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。

1.4.2 响应头部

1.4.3 响应数据

用于存放需要返回给客户端的数据信息。

HTTP/1.1 200 OK  状态行

Date: Sun, 17 Mar 2013 08:12:54 GMT  响应头部

Server: Apache/2.2.8 (Win32) PHP/5.2.5

X-Powered-By: PHP/5.2.5

Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Length: 4393

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=utf-8

  空行

<html>  响应数据

<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

1.5 浏览器解析HTML代码,并请求HTML代码中的资源

浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器端去请求下载。

1.6 关闭TCP连接,浏览器对页面进行渲染呈现给用户

浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。

HTTP请求的完全过程相关推荐

  1. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  2. AFNetworking post请求遇到问题解决过程

    AFNetworking post请求遇到问题解决过程 参考文章: (1)AFNetworking post请求遇到问题解决过程 (2)https://www.cnblogs.com/yuancong ...

  3. 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)

    Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能: 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求. 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成 ...

  4. HTTP协议、【HTTP请求、响应格式】及一次HTTP请求的完整过程

    HTTP协议及一次[请求.响应]的完整过程 HTTP协议简介 HTTP协议工作原理 一次HTTP请求的完整过程 浏览器根据域名解析IP地址 浏览器通过IP地址与WEB服务器建立一个TCP连接 浏览器给 ...

  5. HTTP请求和响应过程

    HTTP请求和响应过程 1.HTTP协议 Internate的基本协议是TCP/IP(传输控制协议和网际协议).而目前使用的FTP,HTTP都是建立在TCP/IP上的应用层协议.不同的协议对应不同的应 ...

  6. Ajax异步请求原理和过程

    Ajax异步请求原理和过程 1.什么是Ajax 2.AJAX创建异步对象XMLHttpRequest ( 考虑兼容性 ) 3.操作XMLHttpRequest 对象 1.什么是Ajax Ajax是一种 ...

  7. 深入操作系统底层分析nginx网络请求及响应过程

    0. 网络传输阶段 比如说主机A是家里windows的一台笔记本电脑,主机B是linux服务器上的一个nginx,其监听80或443等web端口. 在笔记本的浏览器发送了一个http get请求,其数 ...

  8. HTTP请求的交互过程和常见的相应状态码

    HTTP请求的交互过程 2022年6月6日 15:15 1.客户端浏览器向网站的服务器发送一个请求 2.网站服务器接收到这个请求后进行解析,处理.然后返回响应对应的数据给浏览器 3.浏览器中包含网页的 ...

  9. mysql查询过程从客户端发送查询请求_MySQL查询过程和高级查询

    最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说自己的理解和总结. 总体目录如下,上篇介绍了前3小节,分析了索引为 ...

  10. 客户每次请求Web页面过程

    客户每次请求页面时--通过最初请求或者回送--所发生的事情.     图中显示了有5个主要事件:初始化.加载.预提交.提交.处理 我们可以为每个步骤添加代码. 1.初始化: ASP.NET处理器第一次 ...

最新文章

  1. 深度剖析如何实现事务消息
  2. ts 函数声明及泛型函数
  3. vb6实现union数据结构_数据结构与算法——并查集(不相交集合)
  4. android node
  5. BBlean最初级的入门幽默教程
  6. ruby rake学习
  7. 解决Sublime Text 3在GB2312编码下的中文乱码问题
  8. Linux 日志切割神器 Logrotate 原理和配置详解(附多生产实例)
  9. Android 节日短信送祝福(功能篇:1-数据库操作类与自定义ContentProvider)
  10. Android 开发学习笔记:七大知识点板块汇总
  11. 基于FPGA的数字时钟设计
  12. 如何利用店铺爆款带动店铺其他商品,关联销售怎样做?
  13. IIS协议和UDA1341TS音频编解码芯片简述
  14. 电脑进不了系统的情况下如何重装win7,电脑无法开机如何重装win7
  15. 使用MathType为公式自动编号
  16. vue 解决: target is not existed: .page-component__scroll .el-scrollbar__wrap“问题
  17. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...
  18. 手机中必备的黑科技App,个个好用至极,现在的你一定需要 1
  19. 【虚拟化qemu】(二)--- qemu 虚拟化软件使用
  20. 吃饱没事做之——爬楼梯题复杂化

热门文章

  1. H5+CSS前端特效源代码:可旋转动态日文片假名
  2. 干货 | 手把手带你搞硬件设计!
  3. jsmind 线条_jsMind思维导图模式数据展示
  4. ireport 3.6.0 增加PDF字体、加粗失效、PDF中文不显示等问题
  5. 硬盘容量统计神器WinDirStat
  6. centos 安装wget命令
  7. 文件共享锁溢出 请增加MaxLocksperFile注册表项值
  8. 调试笔记:BSOD 0xA
  9. 技能梳理8@esp8266+lua+onenet+血氧检测MAX30102
  10. 基于php的人力资源管理系统,基于thinkPHP框架的人力资源管理系统