什么是协议
所谓协议,就是指通信双方需要遵守了一系列标准,例如信件协议,如下:
什么是HTTP协议
① 什么是HTTP
通俗来讲,就是互联网通信标准。
当我们访问网页的时候,其实就是客户端和服务器端在进行通信。
② HTTP协议的历史(了解)
最早的HTTP协议的版本为0.9版本,是在1990年的时候提出来。
在1996年的时候,HTTP版本更新到了1.0,但是1.0有一个缺陷:客户端与服务器端建立好连接以后,每次只能处理1个请求,如果1个请求处理完,连接就会断开。
在1997年的时候,又提出HTTP1.1
最大的改进在于:建立连接以后,客户端可以向服务端 多次请求
③ HTTP协议的特点
(1) 支持客户端和服务器端模式
(2) 灵活:Content-Type 该属性可以修改文件的数据类型
(3) 无状态(重要)
所谓断开式,就是指HTTP协议发送请求的时候,无论发送多少次,每一次都会被当做全新的请求,服务器并不知道这一次请求和上一次请求之间有什么关系(ATM案例)
(4) HTTP协议的内容格式
HTTP请求:请求行,请求头,空行 →消息头 消息体
HTTP响应:响应行,响应头,空行 →消息头 消息体
HTTP请求
请求行里面:包含 请求的方式,请求目录 ,协议和版本
下面是一些键值对,具体的信息如下表:
HTTP响应:
服务器就处理了HTTP请求以后,会将处理结果封装到响应的消息体里面,并且响应头也有额外的信息,如下:
常见的响应头信息如下:
在实际开发中怎样查看HTTP请求和响应(重要)
在一般的浏览器里面,都内置了开发者工具,可以按F12打开
请求头
响应头
URL
URL:翻译成中文为 统一资源定位符
互联网上有各种各样的资源,这些资源是存在于不同的服务器,我们要找到这些资源,就需要通过URL
URL一共分为4个部分:schema(架构名),host(主机名),port(端口号),path(资源路径)
① Schema:架构名
除了HTTP协议以外,还有其他的协议
② 主机名
主机名就是网络里面的地址,和现实生活中的地址是一样的,只有输入正确的地址,才能找到你想要的资源。
主机名有两种形式:IP地址和域名
IP:网络中对计算机的唯一编号。就相当于现实生活中的地址。但是有一个IP需要大家记忆:127.0.0.1 表示本机的IP号
域名:就是相当于对IP的一个封装,便于更加容易记忆。例如baidu.com就是一个域名。这里需要记住一个特殊的域名:localhost 表示本机
DNS:域名解析器,顾名思义,就是用来解析域名的。当我们通过域名来访问服务器地址的时候,最终还是会被DNS解析为IP地址。
③ 端口号
所谓端口号,就是指一台服务器有多个应用,每个应用对应了不同的端口,当我们要访问不同的应用的时候,只需要进入相应的端口即可
常见的端口号:
0-1023 默认是系统自定义的
0--65535 能用的端口号‘范围’
可在控制台输入:netstat -an 即可查看所有‘可听’端口号
补充:11211为memcache的端口
如果是用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:直接影响了浏览器的处理行为。
GET和POST
① 区别
首先是请求行的第一个单词不同,接下来在请求体方面也有不同:get是没有请求体的,但是post有请求体
理论上post里面的请求体可以无限的写入数据,但是PHP配置文件里面还是对POST提交的内容有大小的限制
② 携带数据的方式
GET:如果是采用GET的方式向服务器传递数据,那么数据会被附加在地址栏(重要)
POST:如果是采用POST的方式向服务器传递数据,那么数据的位置位于HTTP请求的请求体里面(重要)
总结如下:
服务器端获取客户端传递过来的数据
在PHP里面有两个超全局数组:$_GET[ ] $_POST[ ]
$_GET[ ]:当向服务器传递数据是使用的get方式的时候,就可以使用$_GET来获取数据
$_ POST [ ]:当向服务器传递数据是使用的post方式的时候,就可以使用$_post来获取数据
如果不知道是get还是post,PHP里面还提供了一个超全局数组$_REQUEST[ ],无论提交的方式是get还是post,都可以获取到数据。但是一般在实际开发的时候用的很少,因为效率低。
$_SERVER[]:获取请求头的相关信息。该数组里面的键值就是请求头里面的键
常见的$_SERVER[]下面的键值
总结: