| |
|
开发:
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详解 |
目录 文章主要以一次HTTP请求的整个过程来讲解(DNS解析不讲):HTTP起源、TCP/IP协议、建立TCP连接、客户端请求、服务端响应、断开TCP连接。 一、简介1.起源今天我们能够在网络中畅游,都得益于一位计算机科学家蒂姆·伯纳斯·李的构想。1991年8月6日,蒂姆·伯纳斯·李在位于欧洲粒子物理研究所(CERN)的NeXT计算机上,正式公开运行世界上第一个Web网站(http://info.cern.ch ),建立起基本的互联网基础概念和技术体系,由此开启了网络信息时代的序幕。 伯纳斯·李的提案包含了网络的基本概念并逐步建立了所有必要的工具:
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连接的状态:
2.建立连接过程了解了TCP包头信息之后,我们就可以正式看看TCP建立连接的三次握手了。
?四、客户端请求????????客户端与服务器连接上了之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。 1.HTTP请求报文结构我们之前说过TCP报文包=TCP头信息+TCP数据体,TCP头信息我们已经讲了,现在来讲TCP数据体,也就是我们的HTTP请求报文。 2.HTTP请求实例来看看实际的HTTP请求例子: 1、①是请求方法,HTTP/1.1 定义的请求方法有8种 ????????????????GET : 请求获取Request-URI所标识的资源 2、②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL 3、③是协议名称及版本号 4、④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息 5、⑤是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。 不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。 请求头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常见的请求报头包括:(每一个报头域都是由 五、服务端响应????????服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。 1.HTTP响应报文结构2.HTTP响应实例?响应头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。常见的响应报头包括:(每一个报头域都是由
3.响应状态码????????状态码用于告知请求方当次请求的状态是成功还是失败,常见的状态码有以下分类:
2XX 成功
3XX 重定向
注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求? 严格地说,我们只能假定只有当原来的请求是 GET 时浏览器才会自动重定向。请参见 307。
4XX 客户端错误
5XX 服务器端错误
六、断开连接在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗? 1.长短连接是否断开我们需要区分HTTP版本:
注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。 早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接。 2.长连接优缺点对于服务器来说建立长连接有优点也有缺点:
所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。 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/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。 5、TCP/IP协议族详解请参考:? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |