首先了解一次完整的HTTP请求到响应的过程需要的步骤

1. 域名解析
2. 发起TCP的3次握手
3. 建立TCP连接后发起http请求
4. 服务器端响应http请求,浏览器得到html代码
5. 浏览器解析html代码,并请求html代码中的资源
6. 浏览器对页面进行渲染呈现给用户

1.域名解析

就是将网站名称转变成IP地址:localhost-->127.0.0.1
像什么hosts文件,DNS域名解析等等可以实现这种功能

2.发起TCP的3次握手

在客户机和服务器之间建立正常的TCP网络连接时:客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

下面一段内容引自一次完整的HTTP事务是怎样一个过程?

拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序(本文就以Nginx为例),最终建立了TCP/IP的连接。

3.发起HTTP请求(HTTP Request)

所谓的HTTP请求,也就是Web客户端向Web服务器发送信息,这个信息由如下三部分组成:

(1)请求行

例如:GET www.cnblogs.com HTTP/1.1
请求行写法是固定的,由三部分组成,第一部分是请求方法:除了常见的只有Get和Post方法,实际上HTTP请求方法还有很多,比如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法第二部分是请求网址,第三部分是HTTP版本。

(2)HTTP头

HTTP头在HTTP请求可以是3种HTTP头:1. 请求头(request header)  2. 普通头(general header)  3. 实体头(entity header)通常来说,由于Get请求往往不包含内容实体,因此也不会有实体头。

(3)内容

只在POST请求中存在,因为GET请求并不包含任何实体

4.服务器端HTTP响应(HTTP Response)请求

当Web服务器收到HTTP请求后,会根据请求的信息做某些处理(这些处理可能仅仅是静态的返回页,或是包含Asp.net, PHP, Jsp等语言进行处理后返回),相应的返回一个HTTP响应。HTTP响应在结构上很类似于HTTP请求,也是由三部分组成,分别为:

1.状态行

例如:HTTP/1.1 200 OK第一部分是HTTP版本第二部分是响应状态码
第三部分是状态码的描述信息类 (100-199)响应成功 (200-299)重定向类 (300-399)客户端错误类 (400-499)服务端错误类 (500-599)

详细HTTP 状态消息请看:HTTP 状态消息

2.HTTP头

HTTP响应中包含的头包括:1. 响应头(response header) 2. 普通头(general header) 3. 实体头(entity header)。

3.返回内容

HTTP响应内容就是HTTP请求所请求的信息。这个信息可以是一个HTML,也可以是一个图片。响应的数据格式通过Content-Type字段来获得:Content-Type:image/png;或者我们熟悉的Content-Type:text/html

下面是一些常见的Content-Type字段的值。

    text/plaintext/htmltext/cssimage/jpegimage/pngimage/svg+xmlaudio/mp4video/mp4application/javascriptapplication/pdfapplication/zipapplication/atom+xml

5.浏览器解析html代码,并请求html代码中的资源

了解持久连接

有时候我们获取一个HTML页面,在对浏览器对HTML解析的过程中,如果发现额外的URL需要获取的内容,会再次发起HTTP请求去服务器获取,比如样式文件,图片。许多个HTTP请求,只依靠一个TCP连接就够了,这就是所谓的持久连接。也是所谓的一次HTTP请求完成。

参考:

1.HTTP协议漫谈

2.一次完整的HTTP事务是怎样一个过程?

3.HTTP 协议入门

来源:http://www.cnblogs.com/YeChing/p/6337378.html

通过HTTP请求响应过程了解HTTP协议相关推荐

  1. 完整的一次 HTTP 请求响应过程(一)

    因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机.通讯设备,即便位于地球两端的用户也可在顷刻间完成通讯. 可以说『协议』是支撑这么一个庞大而复杂的系统有条不紊运作的核心,而所谓『协议』就 ...

  2. 完整的一次 HTTP 请求响应过程(二)

    上篇文章 我们完整的描述了计算机五层模型中的『应用层』和『运输层』,阐述了较为复杂的 TCP 协议的相关原理,相信大家一定也有所收获,那么本篇将继续五层模型的学习. 网络层 『网络层』其实解决的就是一 ...

  3. 一次完整的HTTP请求响应过程(很详细)

    一. HTTP请求和响应步骤 图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协议 ...

  4. JSP页面请求响应过程中的编码解码

    该片简要讲述:JSP页面传输过程中,浏览器与服务器的编码解码以及HTTP协议对URL进行的编码解码. 问题如下: //所有的JSP页面的编码都是UTF-8的格式 //test1.jsp <%@ ...

  5. 【计算机网络】浏览器中的 http 请求响应过程

    客户端输入 url 后的相应过程 http 的工作过程通常包括请求和相应两个环节,属于标准的客户端服务器模型( C/S 模型).客户端发起 http 协议请求,服务器接收到请求后,返回对应的相应.具体 ...

  6. HTTP请求和响应过程

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

  7. 初次使用Apache、ip地址、防火墙、域名、DNS、hosts文件、端口、URL介绍、Apache配置文件、配置虚拟主机、请求响应、http协议、

    Apache提供web服务: 启动Apache,让其客户端可以使用你机器上安装的Apache提供的web服务,访问你机器上的网站.这种情况下你的计算机就是服务器,别人的机器就是客户端. 注意:确保配置 ...

  8. HTTP概念协议报文结构请求响应数据报分析

    文章目录 前言 一.HTTP的概念.特点.工作过程.应用场景 二.HTTP协议报文格式查看方式 三.HTTP协议数据报格式解读 http请求数据报 Part1:首行 关于URL 关于http方法 Ge ...

  9. HTTP协议协议报文结构请求响应数据报分析

    目录 一. 何为HTTP 1. 简单理解HTTP协议的工作过程 2. Fiddler抓包工具 2.1 抓包工具的原理 二. HTTP 请求解析 1. 首行结构 1.1 认识URL 1.2 HTTP方法 ...

最新文章

  1. Markdown语法-基础
  2. powershell创建iis站点、应用程序及应用程序池
  3. ie 不执行回调函时_javascript引擎执行的过程的理解--执行阶段
  4. 【289】◀▶ Python I/O 读写文本文件
  5. Web前端笔记-js中加载图片文件(vue cli中同样适用)
  6. java pdf无法加载_java - 试图使用iText7合并来合并pdf,但是当我打开最终的合并pdf时,它说无法加载pdf文档 - SO中文参考 - www.soinside.com...
  7. LIRe 源代码分析 5:提取特征向量[以颜色布局为例]
  8. 配置linux的web服务
  9. 《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分
  10. HTC Z710t解锁 获取root权限
  11. [jzoj 4244] 【五校联考6day2】yi {贪心}
  12. Python什么都能做(二)用Python画微信新出的表情包
  13. fuchsia中virtio 后端实现
  14. iPics2Go: iPhone变身扫描仪
  15. MySQL面试问题包含答案仅参考
  16. ChatGPT提示词工程(六):Expanding扩展
  17. python中string和bool的转换
  18. Vue前端页面跳转,登录成功跳转页面
  19. java设置启动内存
  20. 心理学-情感与情绪(mooc笔记)

热门文章

  1. ubuntu c 判断程序是否启动_刚刚接触编程的我,怎么判断自己是否适合做一个程序员?...
  2. 64位Linux下安装mysql-5.7.13-linux-glibc2.5-x86_64 || 转载:http://www.cnblogs.com/gaojupeng/p/5727069.html
  3. AJAX中文传值乱码问题解决方法
  4. 检索数据_7_拼接列的值
  5. python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程
  6. python中的chr和ord函数_python chr()和ord() | 学步园
  7. 计算机信息系统安全保护条例最新,计算机信息系统安全保护条例.doc
  8. 用python简单处理图片(2):图像通道\几何变换\裁剪
  9. mysql 不join的原因
  10. springboot 详解 (四)redis filter