适合小白的网络安全学习笔记——第五课(应用层协议http)

HTTP协议

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则,同时是一种无连接、无状态的协议。

无状态:退出再重进浏览器不会意识到还是你

无连接:当服务端和客户端进行通讯的时候,客户端向服务端发起请求,服务端接收请求之后返回给客户端一个响应,之后就会断开不再继续保持连接了

MIME概念

MIME(多用途邮件扩展,一开始只用于邮件附件)是一种标准,用来说明文件类型的

两部分组成:类型(type)和子类型(subtype)例如“text/html”

HTTP请求组成

http请求由请求行,消息报头(cookie等等),请求正文(post有get没有)三部分构成。name=John+Doe&age=30&location=New+York // 请求体,除了请求体的都是请求头

HTTP请求行

请求行由请求Method,(http请求方式)  URL 字段和HTTP Version三部分构成, 总的来说请求行就是定义了本次请求的请求方式, 请求的地址, 以及所遵循的HTTP协议版本例如:

GET /example.html HTTP/1.1 (CRLF)

常见的HTTP请求方式包括:

  1. GET:从服务器获取数据,通常用于获取网页、图片等静态资源。

  2. POST:向服务器提交数据,通常用于提交表单、上传文件等操作。

  3. PUT:向服务器上传新数据,通常用于更新资源。

  4. DELETE:从服务器删除数据,通常用于删除资源。

HTTP请求头

Hostwww.example.com,指定了请求的服务器地址

Content-Length45,指定了请求体的长度。

Connectionkeep-alive,指示服务器保持连接以便后续请求(为什么还会有连接到最后看)

User-Agent 表示浏览器或者操作系统的属性

Windows NT 10.0; Win64; x64 表示操作系统信息

AppleWebKit/537.36 (KHTML, like Gecko)Chrome/91.0.4472.77 Safari/537.36 表示浏览器信息

Referer 表示这个页面是从哪个页面跳转过来的

**吞吐率:**单位是 “req/s”。吞吐率特指 Web 服务器单位时间内处理的请求数

Content-Disposition

是一个 MIME 协议的扩展头部字段,用于定义邮件附件或网页中文件的展示方式。在 HTTP 协议中,它主要用于指示浏览器如何处理响应体内容,即是否应该将内容内联显示(即作为页面的一部分)或作为附件下载并保存到本地。

  1. inline:默认值,表示响应的内容将被浏览器内联展示,通常用于 PDF、图片等文件,用户可以直接在浏览器中查看内容。

  2. attachment:表示响应的内容将被浏览器视为附件,提示用户下载文件。如果提供了 filename 参数,浏览器会使用该参数值作为下载文件的默认文件名。

例如,当服务器发送一个文件并希望用户下载而不是在浏览器中打开时,可以使用以下头部:

Content-Disposition: attachment; filename="filename.jpg"

http守护进程:

如果客户端长时间没有发起请求,网关长时间得到响应时,就会默认此次的连接已经完成,从而断开,那么下次的连接还要重新进行TCP的连接,所以为了维持这样的状态,服务器会开启一个http进程来维持该连接。

X-Forwarded-For头的值通常是一个或多个IP地址,用逗号分隔。第一个IP地址通常是原始请求者的地址,随后的地址可能是中间代理服务器的地址。例如:

X-Forwarded-For: 192.0.2.1, 198.51.100.1

Content-Type 是 HTTP 头部用来指示资源的 MIME 类型(媒体类型)。在 Content-Type 的定义中,application 是指该媒体类型属于应用程序类型

  1. application/x-www-form-urlencoded:这是 HTML 表单默认的编码方式,用于提交表单数据。数据被编码为键值对,以 & 分隔,每个键值对的键和值通过 = 连接。

  2. application/javascript:用于传输 JavaScript 代码。

总结post请求需要注意的:

1.请求方式, 请求行中的请求方式需要改为POST

2.请求头, 提交POST请求, 需要比GET请求多提供几个请求头, 其中最重要的一个是 Content-Type: application/x-www-form-urlencoded

3.请求体格式, 请求头和请求体之间有一个请求空行, 也就是一行空内容, 用来分隔请求头和请求体的内容, 如果中间的空行被不小心删掉了或者多了几行空行, 都会出现异常

HTTP响应

也由三部分组成,包括状态行,消息报头,响应正文。

HTTP响应状态行

状态行也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的文本描述。例如:

HTTP/1.1 200 OK (CRLF)
HTTP响应状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx指示信息 - 表示请求已接收,继续处理 2xx成功 - 表示请求已被成功接收、理解、接受 3xx重定向 - 要完成请求必须进行更进一步的操作 4xx客户端错误 - 请求有语法错误或请求无法实现 * 5xx服务器端错误 - 服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200: OK - 客户端请求成功

400: Bad Request - 客户端请求有语法错误,不能被服务器所理解 

401: Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403: Forbidden - 服务器收到请求,但是拒绝提供服务 

404: Not Found - 请求资源不存在,eg:输入了错误的URL

500: Internal Server Error - 服务器发生不可预期的错误 * 

503: Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

HTTP状态返回码302

是一个重定向状态码,它表示请求的资源已经被临时移动到了另一个位置。当客户端发送一个请求时,服务器会返回302状态码以及一个包含新位置的URL的响应头,客户端会根据这个新的URL重新发送请求。这种状态码通常用于处理网页重定向或者临时性的资源移动。

http连接扩展

HTTP是基于请求与响应的,且最主要的两个特点就是无连接无状态,但是,虽然是无连接的,但其底层也就是传输层大多却是基于 TCP面向连接的通信方式,因此,这里的无连接指的是:当server端和client端进行通讯的时候,client端向server端发起请 求,server端接收请求之后返回给client端一个响应,之后就会断开不再继续保持连接了;这样有一个好处就是对于只有一次访问的连接来说不仅节省 资源还很高效,但很明显,如果client端还想继续多次访问server端就需要重新建立连接也就是会多次进行TCP的“三次握手,四次挥手”的过程, 这样一来并没有节省资源而且还很低效,因此使用keep-alive(又称持久连接、连接重用)可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,避免了建立或者重新建立连接的次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高http服务器的吞吐率(更少的TCP连接意味着更少的系统内核调用,socket的accept()和close()调用)。

  • 26
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值