HTTP协议原理

一、http协议是什么

        HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议,广泛应用于Web浏览器和Web服务器之间的应用层通信协议。

      在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

HTTP协议特点:

        1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

        2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

        3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

        4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快 (实际网站中会用cookie,session等解决这种无状态请求带来的不便)。

        5、支持B/S及C/S模式,默认端口80,明文传输。

        6、永远都是客户端发起请求,服务器回送响应

       因为HTTP协议为明文传输,不适合传输一些敏感信息,此时HTTPS协议就出现了。

        HTTPS协议其实就是HTTP协议的安全版,由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议。默认端口为443,主要用于网银,支付等和钱相关的业务,用于安全的HTTP数据传输(SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密)。

图片来自:深入理解HTTP协议原理_zhaisharap的博客-CSDN博客_http协议原理

       ( ps: HTTP3之前协议基于TCP协议,因为TCP协议通过数据分片、到达确认、超时重发、滑动窗口、失序处理、重复处理、数据校验等规定,为使用TCP连接的双方提供一个面向连接、可靠的字节流服务。)

        为什么HTTPS协议增加了一定的安全保障且技术足够成熟,HTTP协议依然被广泛应用呢?

        因为HTTPS协议同样具有一定的缺陷:

        1、需要申请ca证书,证书一般都是收费的,且功能越强大,证书收费越高。

        2、HTTPS因为加入了SSL协议,HTTPS除了TCP的三个包,还要加上SSL握手需要的9个包,连接服务器端资源占用高很多,且费时,包括SSL的加解密也需要一定的时间,网站响应时间会变慢,用户体验感不如HTTP

        3、HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高

        

        所以一些小网站,对安全性要求没有特别要求的网站还是会采取HTTP协议,尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,他大幅增加了中间人攻击的成本,保障了一定程度的相对安全。

二、HTTP协议不同版本

        1、HTTP 0.9 ,只有一个GET方法,没有首部,目标用来获取HTML(基本没人用了)。

        2、HTTP 1.0 ,创建一次连接,获得一个web资源,连接断开(但是这样每次请求都会重新建立和断开 TCP 连接,无法复用,代价过大)。

        3、HTTP 1.1,创建一次连接,获得多个web资源,连接断开(默认持久连接,引入cookie以及安全机制,)

        4、HTTP 2.0,中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据(HTTP2使用了HPACK头部压缩算法,多路复用,在一定程度上减轻了传输的成本。但如果存在丢包的情况的话,那么整个tcp就得重新传输,后面资源就会被阻塞)。

        5、HTTP 3.0,改用了 QUIC协议,此协议基于传输层UDP协议(在此之前基于TCP协议),极大幅度提高了数据传输速率,也解决了HTTP2.0丢包的问题(没有实际使用过,有无其他安全,性能问题,暂且不知)。

三、常见的HTTP请求方法

        1、GET:GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响

        GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,一般仅用于请求数据,但是开发过程中也会用于修改数据,可行但不提倡。(因GET请求的不安全性,在处理敏感数据时,尽量不可以使用GET请求)

         2、POST:POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

        POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

        3、PUT:PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

        4、DELETE:DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

        5、HEAD:HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分,一般用来确定请求的有效性及资源的更新日期时间等。(因为服务器返回的消息头应与对应GET请求返回的消息头相同,这种方法可用于检查某一资源在向其提交GET请求前是否存在。)

        6、CONNECT:CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)

        7、OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

        8、TRACE:TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。(这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器)

      

        在所有的HTTP方法中,安全界认为PUT、DELETE、TRACE是不安全的,TRACE容易引发XST攻击,PUT/DELETE没有认证机制等原因,利用PUT方法即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限或者利用DELETE方法可以删除服务器上特定的资源文件,造成恶意攻击(PUT、TRACE请求方法因为风险过大,现在基本很少被使用,DELETE请求方法,需要做好认证)。

        当然OPTIONS方法也存在一定的风险,将会造成服务器信息暴露,如中间件版本、支持的HTTP方法等,但是风险相对前三种方法,还是较小的。

OPTIONS方法返回信息

四、HTTP工作原理

        HTTP协议定义Web客户端浏览器如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端服务器。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

浏览器发送网络请求到服务器

1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接,若连接还未失效,则省略三次握手;

wireshark抓包,连接未失效示例 

3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

三次握手,建立连接

wireshark抓包示例

4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5. 四次挥手,释放 TCP连接;

四次挥手,断开连接

wireshark抓包,四次挥手

6. 浏览器将该 html 文本并显示内容;  

五、HTTP请求包和返回包

        burp抓包分析一下HTTP请求包和返回包。

        http请求包括:请求行(第一行)、请求头、请求体

        http响应包括:响应行(第一行)、响应头、响应体

       

 1、请求包的一些重要的配置信息: 

配置信息描述及常用配置值
Location指定响应的路径,需要与状态码302配合使用,完成跳转
Content-Type

响应正文的类型(MIME类型)

取值:text/html;charset=UTF-8,text/plain,text/css,text/javascript,image/gif,image/jpeg,image/png,application/x-www-form-urlencoded,application/json,text/xml,multipart/form-data

Set-Cookie与会话相关技术。服务器向浏览器写入cookie
Content-length响应正文的长度
Cache-Control 响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的取值有常见的取值有private、public、no-cache、max-age,no-store,默认为private。缓存时间为31536000秒(365天)
Connectionconnection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求

 2、返回包重要配置

六、HTTP返回状态码

一些常见的返回状态码分析:

  200: '服务器成功返回请求的数据。'

  201: '新建或修改数据成功。'

  202: '一个请求已经进入后台排队(异步任务)。'

  204: '删除数据成功。'

  400: '发出的请求有错误,服务 器没有进行新建或修改数据的操作。'

  401: '用户没有权限(令牌、用户名、密码错误)。'

  403: '用户得到授权,但是访问是被禁止的。'

  404: '发出的请求针对的是不存在的记录,服务器没有进行操作。'

  406: '请求的格式不可得。'

  410: '请求的资源被永久删除,且不会再得到的。'

  422: '当创建一个对象时,发生一个验证错误。'

  500: '服务器发生错误,请检查服务器。'

  502: '网关错误。'

  503: '服务不可用,服务器暂时过载或维护。'

  504: '网关超时。'

参考文献:

HTTP为什么使用TCP_曾经的阿飞的博客-CSDN博客_为什么http用tcp

Http协议详解(深入理解)_有抱负的小狮子的博客-CSDN博客_http详解

百度安全验证

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值