详解http协议

                                                                详解http协议

本文通过自己的一些学习和参考了《图解HTTP》

                                                          1.定义:

                                                          2.URL解析

                                                         3.http协议的版本

                                                        4.http的工作原理

                                                     4.1 在浏览器地址栏键入URL,按下回车之后会经历以下流程:

                                                    4.2 请求/响应报文的头部信息:

                                                        请求方法:

                                            GET和POST的区别:

                                                   常见的状态码:

                                       4.3http协议的特点:

                                       5.https协议:


1.定义:

http协议是超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。是一种详细规定了浏览器和万维网直接按互相通信的规则,允许将HTML文档从web服务器传送到Web服务器。默认的端口是80.

基于 请求-响应 的模式

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应

 

2.URL解析

URL(Uniform Resource Locator,统一资源定位符)。URL正是使用 Web 浏览器等 访问 Web 页面时需要输入的网页地址。例如 :https://www.baidu.com/

在一个完整的URL中应该包含如下几个部分:

协议名称:指明了当前通信使用了什么协议(http/https/ftp等)

登录信息:在冒号前面是用户名,后面是密码。用户名和密码作为从服务器端获取资源时必要的登录信息(身份 认证)。此项是可选项。

服务器地址:这里是服务器的地址,可以是域名(因为ip地址不方便记忆,通过DNS协议来将域名和ip地址进行了映射)当然这里也可以是192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。

服务器端口号:默认为80号端口。

资源路径:这个表示了我们要访问的资源在服务器上的路径,/ 表示了根目录。

查询字符串:客户端提交给服务器的一些数据,由key-val的键值对组成,键值对之间通过&进行间隔。如果在URL中出现了特殊的字符,这时候就需要将这些特殊的字符进行转码,因为在URL中由很多的特殊字符有着自己的含义,防止重复定义。

urlencode编码:将特殊字符的每个字节都转换成16进制的数字字符(通过ASCLL值),并且在前面加上%。

Urldecode编码:在url中遇到%就将后面的两个字符,通过ASCLL值转化成原来的字符。

片段标识符:表示HTML中的某个标签,可以直接跳转到网页的某个位置。

3.http协议的版本

 http 0.9:

最初的版本,只有一个命令GET,服务器只能回应HTML格式字符串。

 http 1.0:

引入了新的命令POST和HEAD(http数据头部)命令
每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接,头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME即多用途互联网邮件扩展,每个值包括一级类型和二级类型,,预定义的类型,也可自定义类型, 常见Content-Type值:text/xml image/jpeg audio/mp3 

http 1.1: 新增方法:PUT、PATCH、OPTIONS、DELETE

引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接引入了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率,同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking),为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接

Http2.0
1.头信息和数据体都是二进制,称为头信息帧和数据帧
2.复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
3.引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
4.HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)

可以参考:https://www.cnblogs.com/luck-pig/p/12006908.html

4.http的工作原理

 4.1 在浏览器地址栏键入URL,按下回车之后会经历以下流程:

   1.首先我们获取到服务器的地址,如果是ip地址就可以直接访问,如果是域名,这时候我们就需要使用DNS协议进行域名解析得到对应的ip地址。


什么是DNS协议呢?

DNS:域名系统,用于进行域名解析,通过域名获取服务器的IP地址。

层级划分的管理方式:不同的域名服务器管理着不同的域名。

域名我服务器:根域名服务器-》顶级域名服务器-》二级域名服务器-》三级域名服务器。。。。

域名解析的流程:

1.查看浏览器的缓存-》2.查看本地的hosts文件-》3.请求本地dns服务器-》4.1访问根域名服务器返回找到或者是顶级域名服务器|||4.2访问根域名服务器返回或者继续访问顶级域名服务器-》5.1访问顶级域名服务器返回找到或者是二级域名服务器|||5.2访问顶级域名服务器返回或者继续访问二级域名服务器。。。。。。

从第4步开始 都有两种方式:递归(根域名服务器直接一直向下,找到最后)或者是迭代(每次返回给我下一层域名服务器,我去访问下一层服务器)。直到找到,或者是走到了末尾就结束了。

 


   2.得到ip地址后,我们就通过tcp协议进行三次握手并建立连接。

   3.客服端发送http的请求操作。

   4.服务器对请求进行响应,并将对应的html文本发送给浏览器。

   5.客户端与服务器断开连接,客户端对于收到的html文本进行渲染后呈现。

 4.2 请求/响应报文的头部信息:

   1.在请求中:

eg:

 

 首部:以空格分开,以\r\n进行结尾,   请求方法 URL 协议版本。

     请求方法:

GET:获取资源,

  GET 方法用来请求访问已被 URL识别的资源。指定的资源经服务器 端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保 持原样返回。

POST:方法用来传输实体的主体

   POST方法主要用于向服务器端提交表单数据,提交的数据在正文中。

PUT:传输文件

    PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请 求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。

HEAD:获得报文首部

    HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。

DELETE:删除文件

   DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按 请求 URI 删除指定的资源。

OPTIONS:询问支持的方法

    OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。

TRACE:追踪路径

    TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方 法。

CONNECT:要求用隧道协议连接代理

   CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协 议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接 层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容 加 密后经网络隧道传输。

注意:

GET和POST的区别:

https://www.cnblogs.com/logsharing/p/8448446.html

     对于这个问题,我们在百度上有些各种各样的答案,我们要分清楚的是,这两种方法是http协议中定义的两种方法,但是又很多在http协议中,并没有严格的定义这两种方法分一些区别,而是在不断的使用和软件的更新中,人们意识上强加的区别。

2.在响应中:

eg:

1.首部:以空格分开,以\r\n进行结尾,  协议版本,响应的状态码 响应的描述。

     状态码:

 常见的状态码:

 

4.3http协议的特点:

      1.无连接:

  1.HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。(短连接)

2. 持久连接 为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。

3. 管线化 持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从 前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。 44 这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待 响应了。

      2.无状态

 HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管 理。也就是说,无法根据之前的状态进行本次的请求处理。

这时候引入了Cookie 的状态管理。

Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态。 Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

例如:我们登录到某个网站上操作的时候,我们不能跳转一个页面就得重新登录,是特别麻烦的事情。

但是 cookie并不安全,这时候我们就使用Session 管理及 Cookie 应用。

步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分, 通常是以 POST 方法把请求发送给服务器。而这时,会使用 HTTPS 通信来进行 HTML表单画面的显示和用户输入数据的发送。

步骤 2: 服务器会发放用以识别用户的 Session ID。通过验证从客户 端发送过来的登录信息进行身份认证,然后把用户的认证状态与 Session ID 绑定后记录在服务器端。

步骤 3: 客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证 接收到的 Session ID 识别用户和其认证状态。

5.https协议:

首先我们要知道http协议的一些缺点:

通信使用明文(不加密),内容可能会被窃听

不验证通信方的身份,因此有可能遭遇伪装

无法证明报文的完整性,所以有可能已遭篡改

这时候我们就引入了一种由HTTP+ 加密 + 认证 + 完整性保护 =HTTPS协议。

可以参考如下,体会https的加密过程

https://blog.csdn.net/guolin_blog/article/details/104546558

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值