不管是日常的web开发还是准备面试题的时候,http的请求过程都是必须要了解的一个知识点,这篇文章就来和大家一起学习了解一下HTTP通信机制的请求过程。

原理

众所周知,HTTP协议是建立在TCP网络连接协议基础之上的一种web通信协议,它有“四个基于”的特点:

请求与响应:客户端发送请求,服务器端响应数据

无状态的:协议对于事务处理没有记忆能力,客户端第一次与服务器建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加页面等待时间,当客户端向服务器端发送请求,服务器端响应完毕后,两者断开连接,也不保存连接状态,颇有提上裤子不认人的意味,下一次客户端向同样的服务器发送请求时,由于他们之前已经遗忘了彼此,所以需要重新建立连接。

应用层:Http是属于应用层的协议,配合TCP/IP使用。

TCP/IP:Http使用TCP作为它的支撑运输协议。HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器(客户机)和服务器进程就可以通过套接字接口访问TCP。

请求过程

HTTP的请求过程可以直观地用下图所示:

可以看到在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列几个步骤:

1. 域名解析

2. 发起TCP的3次握手

3. Web浏览器向Web服务器发送http请求报文

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。

3.1 请求行

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

3.2 请求方法

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

3.3 请求数据

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

4. Web浏览器发送http请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

请求报文示例:

POST  /index.php HTTP/1.1    请求行Host: localhostUser-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.8Accept-Language: zh-cn,zh;q=0.5Accept-Encoding: gzip, deflateConnection: keep-aliveReferer: http://localhost/Content-Length:25Content-Type:application/x-www-form-urlencoded空行username=aa&password=1234  请求数据

5. Web服务器应答

浏览器向服务器发出请求后,服务器会浏览器回送应答HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。HTTP响应报文由状态行(status line)、相应头部(headers)、空行(blank line)和响应数据(response body)4个部分组成。

6. Web服务器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

7. Web服务器向浏览器发送数据

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

响应报文示例:

HTTP/1.1 200 OK  状态行Date: Sun, 17 Mar 2013 08:12:54 GMT  响应头部Server: Apache/2.2.8 (Win32) PHP/5.2.5X-Powered-By: PHP/5.2.5Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Pragma: no-cacheContent-Length: 4393Keep-Alive: timeout=5, max=100Connection: Keep-AliveContent-Type: text/html; charset=utf-8空行<html>  响应数据<head><title>HTTP响应示例<title></head><body>Hello HTTP!</body></html>

8. Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

实例分析

举个例子,在浏览器地址栏输入www.baidu.com,再按回车,回车后浏览器与服务器做了什么呢?过程大致如下:
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

更加细致的分析讲解可参考:
一次完整的HTTP请求过程
HTTP请求的完全过程

技术无止境,路遥有佳期。我是浮生,祝你幸福!

HTTP的请求连接过程相关推荐

  1. rtsp连接断开_live555学习之RTSP连接建立以及请求消息处理过程

    live555 学习之 RTSP 连接建立以及请求消息处理过程 1 , RTSP 连接的建立过程 RTSPServer 类用于构建一个 RTSP 服务器,该类同时在 其内部定义了一个 RTSPClie ...

  2. rtsp连接断开_live555_RTSP连接建立以及请求消息处理过程

    1,RTSP连接的建立过程RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.首先创建RTSP服务器(具体实现类是 ...

  3. HTTP请求的过程与TCP连接的过程

    HTTP请求的过程与TCP连接的过程 http请求的详细过程 HTTP是一个应用层的协议,在这个层的协议,是一种网络交互需要遵守的一种协议规范. 1.连接:当输入一个请求时,首先建立一个socket连 ...

  4. websocket / 使用 wireshark 分析 websocket 连接过程

    一.连接过程时序图 二.wireshark 分析 上图是一个完整的进行 websocket 连接时产生的数据包. 根据时序图可知,前 3 行是 tcp/ip 握手过程,因为可以通过标志来看到,前 3 ...

  5. TCP三次握手详解及释放连接过程

    TCP头部: 其中 ACK   SYN  序号  这三个部分在以下会用到,它们的介绍也在下面. 暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的A ...

  6. Tomcat系列(6)——Tomcat处理一个HTTP请求的过程

    Tomcat的架构图   图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.js ...

  7. 局域网ssr转pptp_[网络技术][转]PPTP连接过程

    转自:http://blog.csdn.net/zhu_hit/article/details/5698958 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2 ...

  8. #tomcat#内部结构和处理一个请求的过程(一)

    Tomcat Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat的 ...

  9. IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析

    IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低 ...

  10. Android WifiDisplay分析二:Wifi display连接过程

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] WifiDisplay之P2P的建立 WifiDisplay之RTSP server的创建 这一章中我们来看Wifi Displ ...

最新文章

  1. 将Session值储存于SQL Server中
  2. Docker 镜像优化:从 1.16GB 到 22.4MB
  3. 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
  4. Linux部署Node.js应用
  5. linux轻量级进程LWP
  6. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation by 解决方案
  7. 自定义smokeping告警(邮件+短信)
  8. let与expr命令的用法与实战案例
  9. 前端学习(361):svn操作后续
  10. python计算时间装饰器_python 写一个计算运行时间的装饰器
  11. Oracle BCT(Block Change Tracking)与增量备份
  12. flowjo软件使用方法_流式技术讲座流式分选技术、配色原则以及分析软件Flowjo的使用...
  13. #自定义多级菜单_怎么搞定排版中的多级列表问题?
  14. 掌握这个分析方法,数据分析就学会了一半
  15. 视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
  16. 精心挑选的100多种机器学习数据集
  17. reviewboard mysql_【ReviewBoard】安装与配置
  18. HUAWEI 机试题:统计射击比赛成绩
  19. eclipse 使用 firebase analysis sdk
  20. 前端入门最全学习笔记--html

热门文章

  1. TL9000 电信业质量体系管理标准
  2. 35岁的程序员:第25章,离职
  3. SC-FDE 系统 基于导频的细小偏估计
  4. 京瓷打印机驱动安装教程,怎么安装方便点?
  5. Terrasolid 安装教程
  6. unity使用TUIO协议
  7. 白话空间统计二十四:地理加权回归(二)
  8. python自制网课答案查找器
  9. 上班打卡--- 通过批处理命令执行jar文件来记录上班时间
  10. 向日葵显示服务器连接失败,向日葵连接服务器成功远程不