IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP详解 -> 正文阅读

[网络协议]HTTP详解

目录

一、简介

1.起源

2.特点

二、TCP/IP协议

三、建立TCP连接

1.TCP包头信息

2.建立连接过程

?四、客户端请求

1.HTTP请求报文结构

2.HTTP请求实例

五、服务端响应

1.HTTP响应报文结构

2.HTTP响应实例?

3.响应状态码

六、断开连接

1.长短连接

2.长连接优缺点

3.断开连接过程

七、扩展补充


文章主要以一次HTTP请求的整个过程来讲解(DNS解析不讲):HTTP起源、TCP/IP协议、建立TCP连接、客户端请求、服务端响应、断开TCP连接。

一、简介

1.起源

今天我们能够在网络中畅游,都得益于一位计算机科学家蒂姆·伯纳斯·李的构想。1991年8月6日,蒂姆·伯纳斯·李在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个Web网站(http://info.cern.ch ),建立起基本的互联网基础概念和技术体系,由此开启了网络信息时代的序幕。

伯纳斯·李的提案包含了网络的基本概念并逐步建立了所有必要的工具:

  1. 提出HTTP (Hypertext Transfer Protocol) 超文本传输协议,允许用户通过单击超链接访问资源;
  2. 提出使用HTML超文本标记语言(Hypertext Markup Language)作为创建网页的标准;
  3. 创建了统一资源定位器URL (Uniform Resource Locator)作为网站地址系统,就是沿用至今的http://www URL格式;
  4. 创建第一个Web浏览器,称为万维网浏览器,这也是一个Web编辑器;
  5. 创建第一个Web服务器(http://info.cern.ch)以及描述项目本身的第一个Web页面。

2.特点

HTTP 协议一共有五大特点:

1、支持客户/服务器模式。

2、简单快速:

????????客户向服务器请求服务时,只需传送请求方法和路径。

3、灵活:

????????HTTP允许传输任意类型的数据对象。

????????正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。

4、无连接:

????????无连接的含义是限制每次连接只处理一个请求。

????????服务器处理完客户的请求,并收到客户的应答后,即断开连接。

????????采用这种方式可以节省传输时间。

5、无状态:

????????无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。 即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。?????

二、TCP/IP协议

我们经常听到一句话就是:HTTP是一个基于TCP/IP协议簇来传递数据

如何理解上面那句话?我们来看看TCP/IP四层模型就明白了。

????????从上图我们可以清晰的看到HTTP使用的传输层协议为TCP协议,而网络层使用的是IP协议(当然还使用了很多其他协议),所以说HTTP是一个基于TCP/IP协议簇来传递数据

????????同样我们可以看到ping走的ICMP协议,这也就是为什么有时候我们开vps可以上网,但是ping google却ping不通的原因,因为走的是不同的协议。?

那TCP/IP协议簇大致是如何工作的,我们再来看看下图:

?我们可以看到在数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。

三、建立TCP连接

我们知道了TCP/IP协议簇大致的工作原理之后,我们来看看HTTP是如何建立连接的。

1.TCP包头信息

????????前面咱们讲过HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。

TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位(上图红色框中),这六种标志位就代表着TCP连接的状态:

  1. URG: 紧急数据(urgent data)—-这是一条紧急信息
  2. ACK: 确认已收到
  3. PSH: 提示接收端应用程序应该立即从tcp接收缓冲区中读走数据
  4. RST: 表示要求对方重新建立连接
  5. SYN: 表示请求建立一个连接
  6. FIN: 表示通知对方本端要关闭连接了

2.建立连接过程

了解了TCP包头信息之后,我们就可以正式看看TCP建立连接的三次握手了。

面试官:为什么http建立连接需要三次握手,不是两次或四次
答:三次是最少的安全次数,两次不安全,四次浪费资源

?四、客户端请求

????????客户端与服务器连接上了之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。

1.HTTP请求报文结构

我们之前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息我们已经讲了,现在来讲TCP数据体,也就是我们的HTTP请求报文

2.HTTP请求实例

来看看实际的HTTP请求例子:

1、①是请求方法,HTTP/1.1 定义的请求方法有8种

????????????????GET : 请求获取Request-URI所标识的资源
????????????????POST :在Request-URI所标识的资源后附加新的数据
????????????????HEAD :请求获取由Request-URI所标识的资源的响应消息报头
????????????????PUT : 请求服务器存储一个资源,并用Request-URI作为其标识
????????????????DELETE :请求服务器删除Request-URI所标识的资源
????????????????TRACE ?:请求服务器回送收到的请求信息,主要用于测试或诊断
????????????????CONNECT:保留将来使用
????????????????OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求

2、②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL

3、③是协议名称及版本号

4、④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息

5、⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。 不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

请求头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常见的请求报头包括:(每一个报头域都是由名字 + : + 空格 + 值组成,消息报头域的名字是大小写无关的。)

五、服务端响应

????????服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。

1.HTTP响应报文结构

2.HTTP响应实例?

响应头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。常见的响应报头包括:(每一个报头域都是由名字 + : + 空格 + 值组成,消息报头域的名字是大小写无关的。)

字段名说明
Age资源的创建时间
Location客户端重定向至指定的URL
Retry-After再次发送请求的时机
www-Authenticate服务器对客户端的认证

3.响应状态码

????????状态码用于告知请求方当次请求的状态是成功还是失败,常见的状态码有以下分类:

类别说明
1XXInformational(信息性状态码)
2XXSuccess(成功状态码)
3XXRedirection(重定向)
4XXClient Error(客户端错误状态码)
5XXServer Error(服务器错误状态码)

2XX 成功

  • 200 :OK 一切正常,对GET和POST请求的应答文档跟在后面。
  • 201 :Created 服务器已经创建了文档,Location头给出了它的URL。
  • 202 :Accepted 已经接受请求,但处理尚未完成。
  • 203 :Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP /1.1新)。
  • 204 :No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
  • 205 :Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP/ 1.1新)。
  • 206 :Partial Content 客户发送了一个带有 Range 头的 GET 请求,服务器完成了它(HTTP /1.1新)。

3XX 重定向

  • 300 :Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在 Location 应答头指明。

  • 301 :Moved Permanently 客户请求的文档在其他地方,新的 URL 在 Location 头中给出,浏览器应该自动地访问新的 URL。

  • 302 :Found 类似于 301,但新的 URL 应该被视为临时性的替代,而不是永久性的。注意,在 HTTP1.0 中对应的状态信息是“Moved Temporatily”。
    出现该状态代码时,浏览器能够自动访问新的 URL,因此它是一个很有用的状态代码。

注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求?http://host/~aaa(缺少了后面的斜杠),有的服务器返回301,有的则返回302。

严格地说,我们只能假定只有当原来的请求是 GET 时浏览器才会自动重定向。请参见 307。

  • 303 :See Other 类似于 301 / 302,不同之处在于,如果原来的请求是 POST,Location 头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

    304 :Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供?If-Modified-Since?头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

  • 305 :Use Proxy 客户请求的文档应该通过 Location 头所指明的代理服务器提取(HTTP /1.1新)。

  • 307 :Temporary Redirect 和 302(Found)相同。许多浏览器会错误地响应 302 应答进行重定向,即使原来的请求是 POST,即使它实际上只能在 POST 请求的应答是 303 时才能重定向。由于这个原因,HTTP/1.1 新增了 307,以便更加清楚地区分几个状态代码:当出现 303 应答时,浏览器可以跟随重定向的 GET 和 POST 请求;如果是 307 应答,则浏览器只能跟随对 GET 请求的重定向。(HTTP/ 1.1新)

4XX 客户端错误

  • 400 :Bad Request 请求出现语法错误。
  • 401 :Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate?头,浏览器据此显示用户名字/密码对话框,然后在填写合适的 Authorization 头后再次发出请求。
  • 403 :Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
  • 404 :Not Found 无法找到指定位置的资源。这也是一个常用的应答。
  • 405 :Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP /1.1新) 406 Not Acceptable 指定的资源已经找到,但它的 MIME 类型和客户在 Accpet 头中所指定的不兼容(HTTP /1.1新)。
  • 407 :Proxy Authentication Required 类似于 401,表示客户必须先经过代理服务器的授权。(HTTP /1.1新)。
  • 408: Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP/ 1.1新)
  • 409: Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP /1.1新)
  • 410 :Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP/ 1.1新)。
  • 411: Length Required 服务器不能处理请求,除非客户发送一个 Content-Length 头。(HTTP /1.1新)
  • 412: Precondition Failed 请求头中指定的一些前提条件失败(HTTP /1.1新)。
  • 413 :Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个 Retry-After 头(HTTP/ 1.1新)。
  • 414 :Request URI Too Long URI 太长(HTTP/ 1.1新)。
  • 416 :Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的 Range 头。(HTTP /1.1新)

5XX 服务器端错误

  • 500:Internal Server Error 服务器故障。
  • 503:Service Unavailable 服务器处于超负载或正在停机维护。

六、断开连接

在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?

1.长短连接

是否断开我们需要区分HTTP版本:

  • 在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接
  • 在HTTP1.0发布仅半年后(1997年1月) ,HTTP/1.1版本发布并带来一个新的功能: 在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接

注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。

早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接。

2.长连接优缺点

对于服务器来说建立长连接有优点也有缺点:

  • 优点: 当网站中有大量静态资源(图片、css、js等)就可以开启长连接,这也几张图片就可以通过一次TCP连接发送。
  • 缺点: 当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。

所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。

ps:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。

3.断开连接过程

在建立TCP连接时是三次握手,而断开TCP连接是四次挥手!

?

七、扩展补充

1、面试官:为何建立连接需要三次握手而关闭连接却需要四次挥手?

????????三次握手是为了建立可靠的数据传输通道,四次挥手则是为了保证等数据完成的被接收完再关闭连接。 既然提到需要保证数据完整的传输完,那就需要保证双方都达到关闭连接的条件才能断开。

2、http2.0

????????HTTP/1.1已经为我们服务了20年,而HTTP/2.0其实在2015就发布了,但是还没有推广开来,关于HTTP/2.0新特性大家也可以去网上查阅相关资料

3、HTTP和HTTPS区别

????????https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。

????????http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。

????????http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

????????http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

????????https协议需要到ca申请证书,一般免费证书很少,需要交费。http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

4、HTTP和TCP的区别

TCP 协议对应于传输层,而 HTTP 协议对应于应用层,从本质上来说,二者没有可比性:

  • HTTP 对应于应用层,TCP 协议对应于传输层
  • HTTP 协议是在 TCP 协议之上建立的,HTTP 在发起请求时通过 TCP 协议建立起连接服务器的通道,请求结束后,立即断开 TCP 连接
  • HTTP 是无状态的短连接,而 TCP 是有状态的长连接
  • TCP是传输层协议,定义的是数据传输和连接方式的规范,HTTP是应用层协议,定义的是传输数据的内容的规范

说明:从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

5、TCP/IP协议族详解请参考:?

TCP/IP协议族详解

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:30:49  更:2022-03-21 21:34:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:03:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码