详解 http

TCP/IP 基础

在学习http之前,我们需要先了解一下TCP/IP 网络基础 我们通常使用的网络(包括互联网)都是在TCP/IP协议族的基础上运行的,而http则属于它内部的一个子集

TCP/IP 分层

TCP/IP 协议族按层次分,可以分为 应用层、传输层、网络层和数据链路层

  1. 应用层:用于存放各类通用的应用服务,如 HTTP、FTP、DNS 与用户最接近的协议, 都属于应用层

  2. 传输层: 提供处于网络连接中两台计算机之间的数据传输, 如 TCP 、UDP

  3. 网络层:用于处理网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了该通过怎样的路径进行通信,如 IP协议

  4. 链路层: 用于处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、网卡光纤等物理硬件

TCP/IP 通信传输

由上可得知,一次网络通信会大致通过上述四层,顺序是 应用层=>传输层=>网络层=>链路层,每往下走一层,都会加上该层所属的首部信息,到达底层的链路层后,链路层将信息发送至另一端,另一端拿到数据后,通过四层逐步往上走,每经过一层,就去掉该层所属层的首部信息,最后得到请求。

IP协议

IP协议位于网络层,几乎所有使用网络的系统都会用到IP协议,但是注意别IP协议和IP地址搞混。

IP协议的作用是把各种数据发送给对方,而要确保数据准确的发送到指定的目标,则需要满足各类条件,IP地址和MAC地址是两个重要的条件

IP地址指明了节点被分配的地址,MAC则是网卡所属的固定地址,即物理地址。IP地址可以和MAC地址进行配对,IP地址可能会变,MAC地址通常是不会改变的。

TCP协议

TCP协议的作用是确保数据能够准确可靠的传给对方,TCP协议会将拿到的HTTP数据分割成报文段,按照需要将这些片段依次发给对方。

讲到TCP那就不得不讲到它的 三次握手四次挥手

三次握手与四次挥手

三次握手的本质就是确认通讯双方收发数据的能力,保证数据准确无误的送达目标处。能防止服务端开启一些无用的连接增加服务器开销,以及已经失效的连接请求突然又传到了服务端,从而产生错误

使用三次握手建立连接

第一次握手:客户端向服务端发送 SYN数据包 请求建立连接,随后客户端进入 SYN_SENT状态

第二次握手:服务端收到SYN包,确认客户端的SYN包,同时自己也发送一个SYN包,即向客户端发送SYN+ACK包,随后服务端进入SYN_RECV 状态

第三次握手:客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK,随后客户端和服务端就成功建立连接,三次握手结束

简单的来说,

客户端告诉服务端,我想请求连接

服务端确认客户端后,通知客户端,可以连接

客户端得到通知后,再告诉服务端,我要开始连接了

使用四次挥手结束连接

四次挥手用于结束连接,当某一端想要结束连接时,则发送一个 FIN数据包,来进行四次挥手

第一次挥手: 客户端向服务端发送一个FIN包,随后进入了FIN_WAIT_1状态

第二次挥手:服务端收到了FIN包后,向客户端发送ACK确认包,需要等待服务端进行处理,随后客户端就进入了 FIN_WAIT_2状态

第三次挥手:服务端处理完成,准备关闭连接,则向客户端发送FIN包,服务端进入 LAST_ACK状态

第四次挥手: 客户端收到FIN包,向服务端发送ACK包,随后进入TIME_WAIT状态,客户端断开连接。服务端收到ACK包后,服务端断开连接。

简单的来说: 客户端告诉服务端,我想要断开连接

服务端收到后,告诉客户端,请稍等

服务端准备完成后,告诉客户端,可以关闭了

客户端得到通知后,告诉服务端,关闭吧,随后进入等待模式,服务端得到客户端的通知则关闭,客户端等待一段时间后,若没有回复则客户端关闭

HTTP请求

客户端

发起一次http请求,其中会包含 请求方式 请求地址 附带参数 请求头部 等信息

请求方式(method)

http请求有多种方式,浏览器地址栏中访问地址,默认是使用get请求,除此之外,还有多种请求方式

方法说明
get获取资源
post传输实体主体
put传输文件
head获取报文首部
delete删除文件
options询问支持的方法
trace追踪路径
connect要求使用隧道代理
link/unlink连接/断开连接

请求地址(url)

请求地址 即目标主机的ip地址

ip地址 域名 DNS服务器 Hosts文件

ip地址即目标主机被分配到的地址,受网络环境影响,如无线网中,ip地址可能会经常发生变化

域名即把ip地址转换为一串字符串,相比于一串长长的数字用户更容易记住一串特定的字符串 ,如 www.baidu.com 就是一个域名,在cmd中 输入 ping www.baidu.com即可得到它的ip地址,在浏览器中输入ip地址与直接输入域名,效果都是一样的

DNS服务器,在浏览器中输入了 www.baidu.com 后,浏览器就通过DNS服务器将域名解析成ip地址,然后再使用 http请求这个地址

Hosts文件可以理解为本地的DNS服务器,在进行DNS请求之前,windows会先去hosts寻找是否有这个域名的解析映射且不需要网络,如果有则直接使用hosts中的ip,如果没有,则请求DNS服务器

附带参数(data)

这里的参数即http请求中携带的参数,如get请求,其参数会跟在url地址后,post使用form表单传参等等

请求头部(Headers)

请求头用于标识请求方,说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。请求头种类众多,这里只列举几种最常见的请求头

协议头作用示例
Accept可接受的响应内容类型*/* (接受所有类型)
Accept-Encoding可接受的响应内容的编码方式。gzip,deflate(GNU zip编码和zlib编码)
Accept-Language可接受的响应内容语言列表。zh-CN,zh;q=0.9,en;q=0.8(可接受中文和英文以逗号间隔,q代表权重,值越大越优先)
Content-type请求体的MIME类型 (用于POST和PUT请求中)multipart/form-data表单文件上传时使用
Host表示服务器的域名以及服务器所监听的端口号。如果所请求的端口是对应的服务的标准端口(80),<则端口号可以省略。192.168.xx.xxx:xxxx
Origin发起一个针对跨域资源共享的请求http://localhost:8080
User-Agent浏览器的身份标识字符串Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36 例如我这里使用的是谷歌浏览器

除此之外还可以自己定义一些请求头,用做特殊标识

服务端

HTTP响应码

HTTP响应码用于表示HTTP请求的返回结果、标记服务器端的处理是否正常、通知出错等工作

类别:

1xx:接收的请求正在处理

2:xx:请求正常处理完成

3:xx:需要进行附加操作以完成请求

4xx:服务器无法处理请求

5xx:服务器处理请求出错

状态码说明
200 OK请求在服务端被正常处理了
204 No Content请求已成功处理,但是响应中不包含主体部分
206 Partial Content客户端请求指定范围的资源,且服务器成功执行了
301 Moved Permanently永久性重定向,表示请求的资源被分配到了新的url
302 Found临时性重定向,表示请求的资源被分配到了新的url,希望能够使用新的url访问
303 See Other表示由于请求对应的资源存在另一个url,应使用get方法重定向获取资源
304 Not Modified表示客户端发送附带参数时,服务端允许访问资源,但请求未满足条件
400 Bad Request表示请求报文中出现语法错误
401 Unauthorized发送的请求需要通过HTTP认证,若之前已进行过一次认证,则表示认证失败
403 Forbidden请求资源的访问被服务器拒绝了
404 Not Found服务器上无法找到请求的资源
500 Internal Server Error服务器内部错误
503 Service Unavailable服务器处于超负载或正在进行停机维护,无法处理请求

与HTTP 协作的Web服务器

代理

代理是什么:

代理时一种具有转发功能的应用程序,它位于服务端和客户端之间,扮演一个“代理人”的角色

代理服务器的基本行为就是接收客户端发送的请求后转发给服务端,服务端返回的响应通过代理服务器后再传给客户端。在htt中,可以级联多个代理服务器,请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器,转发时则需要附带Via首部字段以标记经过的主机信息

*为什么使用代理:

使用代理的理由有:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志等等

缓存代理

代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,当代理再次接收相同资源的请求时,就可以不从服务端那里获取资源,而是将之前缓存的资源返回

即使缓存服务器上由缓存,也不能保证每次都会返回相同资源的请求,这关系到时效性的问题

透明代理

转发请求或响应时,不对报文做任何加工的代理类型叫透明代理,反之,对报文内容进行加工的代理被称为非透明代理

网关

网关的工作机制类似于代理。而网关能使通信线路上的服务器提供非HTTP服务。

利用网关能提高通信的安全性,因为可以在客户端和网关服务器之间的通信路线上加密以保证连接的安全。

隧道

隧道可按要求建立起一条于其他服务器的通信线路,届时由SSL等加密手段进行通信 ,其目的时保证客户端于服务端的安全通信。

隧道本身不会去解析HTTP请求,HTTP请求会原样中继给服务端

HTTPS

HTTP的缺点

尽管http作为世界上最流行的网络通信协议,但它还是有许多不足

  1. 通讯使用明文,内容可能被窃听:

    http本身不具备加密的功能,所以也无法对通讯整体进行加密,http的报文是使用明文发送的,这种方式可能会被抓包工具所捕获

  2. 不验证通讯方的身份,可能会遭遇伪装

    在http中,不存在确认通信方的处理步骤,也就是说不论是谁发过来的请求都会返回响应,这会导致

    1. 无法确定发送至目标的web服务器是否是已伪装的web服务器

    2. 无法确定返回到的客户端是否是已伪装的客户端

    3. 无法确定正在通信的对方是否具备访问权限,因为某些服务器上保存这重要信息,只想发给特定用户通信的权限

    4. 无法判定请求来自何方,出自谁手

    5. 即使是无意义的请求也会接收,无法阻止海量请求下的DoS攻击

  3. 无法证明报文的完整性:

    http无法证明通信报文的完整性,在请求或响应送出之后知道对方接收前的这段时间里,即使请求或响应遭到篡改也无法知晓

HTTPS

HTTP+加密+认证+完整性保护=HTTPS

加密

通过SSL(Secure Socket Layer 安全套接层)或 TLC(Transport Layer Security安全传输层协议),可以加密HTTP的通信内容。

通过这两个协议,可以在客户端于服务端搭建一条安全的通信线路,在此线路上使用HTTP协议进行通讯

认证

SSL使用了一种被称为证书的手段,用户访问服务端之前都会先检查服务端的证书;;;,用于确定通信方。证书由第三方机构颁发,用以证明服务器和客户端时实际存在的,且伪造证书从技术角度上来说是非常困难的一件事

完整性保护

通常使用MD5和SHA-1等散列值校验以及用来确认文件的数字签名方法来验证完整性。

提供文件下载服务的Web网站会提供相应的以PGP(Pretty Good Paivacy完美协议)创建的数字签名及MD5算法生成的散列值。PGP用来证明创建文字的数字签名。MD5是由单项函数生成的散列值。

无论哪一种方式,都需要用户本人亲自检查验证下载的文件是否就是服务器上的文件,浏览器无法自动帮用户检查,所以需要搭配加密,认证等方式

HTTPS 简单来说就是 披着SSL协议的HTTP

Web 攻击技术

主动攻击与被动攻击

主动攻击

攻击者通过直接访问Web应用,把攻击代码传入的攻击方式,其中具有代表性的是 SQL注入和 OS命令注入

被动攻击

利用圈套执行攻击代码的攻击模式,被动攻击中,攻击者不直接对Web应用访问发起攻击

跨站脚本攻击

攻击者诱使用户触发已设置好的陷阱,当用户中招后,陷阱程序会使用用户的浏览器发送具有攻击性的代码至服务器,将用户当作跳板,以达到攻击的目的

SQL注入攻击

通过运行非法的SQL而产生的攻击

例如在web表单中,输入 1 == 1--等数据库特殊字符,以达到攻击服务端数据库的目的

OS 命令注入攻击

通过Web应用执行非法的操作系统命令达到攻击的目的,只要在能调用 Shell 函数的地方都有被攻击的风险

HTTP头部注入攻击

攻击者通过在响应头部字段内插入换行,添加任意头部或主体的一种攻击,属于被动攻击

目录遍历攻击

对本无意公开的文件目录,通过非法阶段其目录路径后,达成访问目的的一种攻击。因此服务器上的任意文件或目录都有可能被访问到

远程文件包含漏洞

当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的url充当依赖文件,让脚本读取之后,九颗运行任意脚本的一种攻击

会话劫持

攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID位置成用户,达到攻击的目的

密码破解

穷举法

又称暴力破解,是指对所有可行的候选密码对目标的密码系统进行试错,以突破验证的一种攻击

例如,某个Web应用的验证密码是由 4位数字 组成,即 0000-9999 中必存在正确密码,尝试所有的密码,可通过通过认证

字典攻击

利用事先收集好的候选密码,如用户的生日,用户的身份证号等等,进行尝试,成功的成败取决于字典的内容

点击劫持

利用透明的按钮或链接做成陷阱,覆盖至Web页面上,诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段

DoS 攻击

发送大量的合法请求,其中参杂着非法请求,让服务器难以分辨何为正常请求。以让运行中的服务呈现停止状态,有时也叫服务停止攻击和拒绝服务攻击

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
http upgrade-insecure-requests是一个HTTP头部字段,用于指定浏览器是否在不安全的HTTP请求中自动升级到安全的HTTPS协议。当该字段设置为1时,浏览器将尝试将HTTP请求升级为HTTPS请求,以提高安全性。 在默认情况下,当浏览器加载一个包含HTTP连接的网页时,网页中的资源请求(例如图片、脚本等)也会默认使用HTTP连接,即使网页本身使用HTTPS连接。这样会存在安全风险,因为HTTP连接的传输是不加密的,可能被黑客窃听、篡改等。 通过使用http upgrade-insecure-requests头部字段,网页可以向浏览器发出指令,在加载时自动将HTTP资源请求升级为HTTPS。这样可以确保网页的所有资源在传输过程中都使用了加密的HTTPS连接,提高用户的安全性。 当浏览器收到网页响应时,会检查其中的资源链接。如果检测到某些资源是使用HTTP连接的,而网页中存在http upgrade-insecure-requests字段并被设置为1,浏览器就会自动将这些资源请求转为HTTPS。整个过程对于用户来说是透明的,用户不需要做任何操作。 需要注意的是,使用http upgrade-insecure-requests头部字段仅仅是告诉浏览器去升级HTTP资源为HTTPS请求,但并不能完全确保资源请求都成功升级为HTTPS。如果某些资源服务器不支持HTTPS,或者HTTPS连接存在错误,那么这些资源仍然会以不安全的HTTP方式加载。 总之,http upgrade-insecure-requests头部字段可以提高网页和资源的安全性,但仍需要保证资源服务器的支持和HTTPS连接的正确配置。同时,网站开发人员和管理员也应该注意安全性措施,确保使用HTTPS连接和加密传输用户的敏感数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值