什么是协议
所谓协议,就是指双方通信过程中必须要遵守的规则
什么是HTTP协议
HTTP协议就是互联网通信标准,超文本传输协议
传输:CS、BS
我们访问网页的时候,事实上就是客户端与服务器端通信。
① http协议相关历史(了解)
最早的HTTP协议的版本为0.9 ,它是在1990年的时候提出的
在1996年的时候,又提出了HTTP1.0
该版本存在的缺陷:客户端与服务器端建立连接以后,每次只能处理1个请求
在1997年的时候,又提出了HTTP1.1
最大的改进:客户端可以向服务器发送多个请求了。
② http协议的特点
(1) 支持客户端/服务器模式
(2) 灵活:HTTP允许传输任意类型的数据,该数据的类型一般由Content-Type加以标记
(3) 无状态:该协议没有记忆能力
所谓断开式:就是指通过HTTP协议发送的请求,无论发送多少次,每一次都会被当成全新的请求,服务器并不知道这一次请求和上一次请求有什么关系
③ http协议中的消息头和消息体
http请求:请求行,请求头,空行 →消息头 消息体
http响应:响应行,响应头,空行 →消息头 消息体
现在一般的浏览器在开发者工具里面都可以查看到http请求和http响应
键值对所对应的含义如下:
HTTP响应,格式如下图:
具体的响应头信息如下:
URL(统一资源定位符)
互联网上有各种各样的资源,存在于不同的服务器,我们就是靠url来找到这些资源。 一个完整的URL包含4个部分,如下:
① Schema架构名
我们这里就可以简单的理解为协议的名称,例如HTTP
第一部分之所以填写协议名称,就是为了确定怎样取得资源
协议有很多种,但是我们最常见的就是HTTP协议
② Host主机名
服务器获取东西,需要你给出详细的主机名,这里的主机名,就相当于现实生活中的地址,你告诉浏览器要去哪一个地方获取资源。
主机名有两种形式:IP和域名
IP:网络中对计算机的唯一编号,有一个特殊的需要记忆,127.0.0.1本机的IP地址
域名:相当于是在IP地址的基础上进行了一个的封装,让人更加容易记忆。例如:baidu.com就是域名,更方便我们的记忆。有一个特殊的域名:localhost,表示本机。
③ 端口号:就是一台服务器上面有很多不同的功能的应用
理解为一个服务器中不同应用的入口即可。
常见的端口号如下图:
注意点:如果使用http协议访问80端口,这个端口号是可以省略的
④ 资源路径:就是在确定端口号以后,资源处于具体的哪一个位置
如下:
就好比进入相应的办公室以后,需要找到文件具体所在的抽屉。
举例:
课堂练习:
状态码和MIME
状态码是由一个数字和一个英语单词构成的
状态码的作用:表示服务器端的响应状态。
200 OK 表示的是服务器处理成功,没有任何问题
状态码的大致分类:
类别 |
描述 |
1xx |
成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
2xx |
成功接收请求,并且已经完成整个请求的处理 |
3xx |
为了完成请求,客户端需要进一步细化请求 |
4xx |
客户端的请求有错误 |
5xx |
服务器端出现错误 |
常见状态码如下表:
301和302是重定向的意思。基本上可以理解为一样,但是有一些细微的差别,301是永久重定向,302是临时重定向。
所谓重定向,就是指让客户端重新去请求资源正确的所在地址。
需要注意的是,使用重定向事实上至少向服务器发送了2次请求,如果有图片或者其他资源的请求,那么请求将大于2
Header()函数:该函数接收3个参数 1. 字符串 :要修改的响应头内容 2. 布尔值(可选):是否覆盖之前的内容 3.int(可选):更改后的状态
一般我们就只使用第一个参数即可
MIME
所谓MIME,就是指文件的类型
常见的MIME类型,如下图:
前面代表主类型,后面代表子类型
MIME的类型直接影响了浏览器的处理行为
GET和POST
① 区别
首先在请求行的第一个单词就是get或者post,接下来在请求体上面也具有区别:get是没有请求体的,但是post可以具有请求体
虽然理论上是可以无限的往消息体里面写入内容,但是PHP配置文件里面对POST提交的内容是有大小限制的
② 携带数据方式的区别
两种提交数据的方式,都是以键值对的方式来提交,但是差异就在于在消息中的位置
GET里面的位置:是在地址栏里面
POST里面的位置:是放在消息体里面
获取请求数据
① 获取请求头的数据
在PHP里面提供了一个专门的超级变量$_SERVER,专门用来获取请求头的信息,只需要知道对应的键值,就可以得到相应的内容。
$_SERVER里面可以填入的键值就是请求头的各个信息的名称
常用的键如下表:
一般在做开发的时候,获取请求头的信息的需求比较少,一般都是获取请求体里面的内容
在PHP里面提供了$_GET[]和$_POST[]两个超全局数组来获取请求体里面的信息
如果不知道是get还是post,php里面还提供了一个$_REQUEST[] 该全局数组也可以获取请求体里面的信息
一般在明确了使用get或者post的情况下不会使用request,因为效率低