HTTP协议(1)

什么是Http

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议,往往是基于传输层的 TCP 协议实现的,它也是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,是万维网通信的基础。

其中还包含了请求与响应模式、报文、端口号、URL、特性、状态码(大分类和小分类)、请求头字段(user-agent、content-type、gzip、encoding)

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

2、无状态
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

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

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

5、支持B/S及C/S模式
扩展:关于B/S及C/S模式

① C/S模式
C/S(Client/Server,客户/服务器)方式的网络计算模式
A、服务器负责管理数据库的访问,并对客户机/服务器网络结构中的数据库安全层加锁,进行保护;
B、客户机负责与用户的交互,收集用户信息,通过网络向服务器发送请求。
C、C/S模式中,资源明显不对等,是一种“胖客户机(fat client)”或“瘦服务器(thin server)”结构。
D、客户程序(前台程序)在客户机上运行,数据库服务程序(后台程序)在应用服务器上运行。
② B/S模式
B/S(Browser/Server,浏览器/服务器)方式的网络结构
A、客户端统一采用浏览器如:Netscape和IE,通过Web浏览器向Web服务器提出请求,由Web服务器对数据库进行操作,并将结果传回客户端。
B、B/S结构简化了客户机的工作,但服务器将担负更多的工作,对数据库的访问和应用程序的执行都将在这里完成。即当浏览器发出请求后,其数据请求、加工、返回结果、动态网页生成等工作全部由Web服务器完成。

工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收
到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

HTTP 协议是个最典型的 **“一问一答”**模型的协议!

比如:当我们在浏览器中输入一个 “网址”之后看到一个网页这个过程其实分为三步:
1.客户端向服务器发送 HTTP 请求
2.服务器收到后,根据请求,找到客户端想要的资源(一般是html),并把这个资源通过 HTTP响应返回给 浏览器
3.客户端收到 HTML 之后,对页面进行渲染

协议格式

在这里插入图片描述

URL

全称 Universal Resource Locator,即统一资源定位符也就是我们平时戏称的"网址"
在这里插入图片描述
URL的格式都是由相关规定订制的,即: 因特网标准RFC1738

具体的参数介绍
在这里插入图片描述

URL encode

有的字符在URL中由特定的含义,所以在URL中不能随意出现,只能被当作特殊含义,例如/ ? :等,如果在某个参数中需要这些字符,就必须进行转义。
转义规则:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

方法(method)

在这里插入图片描述

GET方法

GET方法是最常用的HTTP方法之一,常用作获取服务器上的资源
作用:向服务器请求数据,并将数据以URL参数的形式附加到URL后面,然后发送给服务器。GET方法通常用于对数据不敏感的场景下,例如搜索引擎查询,因为GET方法请求的数据存在于URL中,可以被缓存,也可以被书签保存。但是,由于GET方法请求的数据存在于URL中,所以不适合用于对数据敏感的场景下,例如登录和注册等操作。
HTML 中的 link, img, script 等标签, 也会触发 GET 请求

特点;
1.首行的第一部分为 GET
2.URL 的 query string 可以为空, 也可以不为空.
3.header 部分有若干个键值对结构.
4.body 部分为空.

POST方法

POST方法多用于提交用户输入的数据,常用于登陆界面中
过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.

特点
1.首行的第一部分为 POST
2.URL 的 query string 一般为空 (也可以不为空)
3.header 部分有若干个键值对结构.
4.body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由
5.header 中的 Content-Length 指定.

GET和POST的区别

HTTP中GET和POST是两种常用的请求方法,它们的区别主要有以下几点:

参数传递方式不同
GET请求的参数是通过URL传递的,即将参数拼接在URL后面,例如:http://www.example.com/index.php?key1=value1&key2=value2。而POST请求的参数是通过请求体传递的,即将参数放在请求体中发送。

安全性不同
GET请求的参数会被完整地保留在浏览器历史记录中,而POST请求的参数不会被保留。因此,GET请求的安全性相对较低,容易被恶意攻击者利用。

数据长度限制不同
于GET请求的参数是通过URL传递的,因此其长度受到URL长度的限制,一般为2048个字符。而POST请求的参数是通过请求体传递的,因此其长度理论上没有限制,但实际上会受到服务器和客户端的限制。

缓存机制不同
GET请求可以被浏览器缓存,而POST请求不会被缓存。因此,对于一些需要频繁访问的资源,使用GET请求可以提高访问速度。

幂等性不同
GET请求是幂等的,即多次请求同一个URL的结果是相同的。而POST请求不是幂等的,即多次请求同一个URL的结果可能不同。

使用场景不同
GET请求一般用于获取资源,而POST请求一般用于提交数据。

举个例子,如果我们要搜索某个关键词,可以使用GET请求,将关键词作为参数拼接在URL后面;如果我们要提交一个表单,可以使用POST请求,将表单数据放在请求体中发送

其他方法

PUTPOST 相似,只是具有幂等特性,一般用于更新
DELETE 删除服务器指定资源
OPTIONS 返回服务器所支持的请求方法
HEAD 类似于GET,只不过响应体不返回,只返回响应头
TRACE 回显服务器端收到的请求,测试的时候会用到这个
CONNECT 预留,暂无使用

报头(Hander)

常见报头:Host,Content-Length,Content-Type,USer-Agent,Referer等

Host

HOST 的值表示服务器主机的地址和端口(地址可以是域名,也可以是 IP;端口号可以省略或者手动指定)

Content-Length

表示 body 中的数据长度.长度单位是字节

Content-Type

表示请求的 body 中的数据格式.

  • application/x-www-form-urlencoded

这是 form 表单提交的数据格式,此时 body 的格式就类似于 query string(是键值对的结构,键值对之间使用 & 分割,键与值之间使用 = 分割

  • application/x-www-form-urlencoded: form 表单提交的数据格式. 此时 body 的格式形如:

title=test&content=hello

  • multipart/form-data

这是 form 表单提交的数据格式(需要在 from 标签上加上 enctyped=“multipart/form-data”),通常用于 HTML 提交图片或者文件

  • application/json: 数据为 json 格式. body 格式形如:

{“username”:“123456789”,“password”:“xxxx”,“code”:“jw7l”,“uuid”:“d110a05ccde64b16a861fa2bddfdcd15”}

User-Agent (简称 UA)

表示浏览器/操作系统的属性. 形如

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/91.0.4472.77 Safari/537.36

其中 Windows NT 10.0; Win64; x64 表示操作系统信息,AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 表示浏览器信息.

Referer

表示这个页面是从哪个页面跳转过来的. 形如

https://v.bitedu.vip/login

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值