一.为什么学习HTTP协议
绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。HTTP协议是网络中应用最广泛的一种协议。
二.什么是HTTP协议
场景:说英文的张三 和 说日语的李四 要如何进行沟通。
明确HTTP协议是:1,浏览器和服务器沟通;
2,处于浏览器和服务器沟通的中间位置;
概念
HTTP:HyperText Transfer Protocol 超文本传输协议
浏览器请求服务器时,需要规定请求信息的格式;服务器响应浏览器,也需要规定响应信息的格式。这个规定,就是HTTP协议。
HTTP协议的特点
1) 不仅支持B/S模式,还支持C/S模式(talent)。
2) 灵活,支持任意类型的数据。
3) 无连接特性(不是不连接的意思),浏览器对服务器进行的每一次完整的请求,过程走完以后都会被断开连接。
4) 无状态特性,指的是协议对事物的处理不具有记忆能力。(你和同桌说话的时候,普通话不会知道上次和你同桌说话的内容和人)
HTTP协议的分类
HTTP请求 和 HTTP响应
三.HTTP请求
组成部分
请求行,请求头,空白行,请求数据
请求行
结构:请求方式 请求的资源路径 协议名和协议的版本号
注意:以上三个部分以空格隔开!
请求头
请求头是由一个一个的请求协议项组成的,
协议项:协议项的名:协议项的值
host:当前url中所要请求的服务器的主机名(域名)
accept-encoding:是浏览器发给服务器,声明浏览器支持的压缩编码类型 比如gzip
accept_charset:表示,浏览器支持的字符集
referer:表示,此次请求来自哪个网址
accept-language:可以接收的语言类型,cn,en等
cookie:如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器再次请求该服务器的时候,就会把对应的数据带过去
user-agent:用户代理,当前发起请求的浏览器的内核信息
accept:表示浏览器可以接收的数据类型,text/html,image/img
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
content-length(post):只有post提交的时候才会有的请求头,显示的是当前要提交的数据的长度(字节)
if-modified-since(get):表示,在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过
content-type(post):用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
空白行
用来分隔请求头和下面的请求数据部分的。
请求数据
注意:只有当请求方式为POST时,才会有请求数据。
四.HTTP响应
组成部分
包括 状态行,响应头,空白行,响应数据
状态行
结构:协议名和协议版本号 状态码 状态描述
响应头
由一个一个的响应协议项组成,
结构:响应项的名:响应项的值
server:服务器主机信息
date:响应时间
last-modified:文件最后修改时间(对应请求中:if-modified-since)
content-length:响应主体的长度(字节)
content-type:响应内容的数据类型:text/html,image/png等
location:重定向,浏览器遇到这个选项,就立马跳转(不会解析后面的内容)
refresh:重定向(刷新),浏览器遇到这个选项就会准备跳转,刷新一般有时间限制,时间到了才跳转,浏览器会继续向下解析
content-encodeing:文件编码格式
cache-control:缓存控制,no-cached不要缓存
空白行
用来分隔响应头和响应数据的!
响应数据
通俗的理解为:展示到浏览器当中的内容。
状态码
1xx:表示请求尚未完成;
2xx:表示请求和响应都没有问题;
3xx:表示重定向;
4xx:表示请求出现错误,响应失败;
5xx:表示服务器出现错误,响应失败;
常见的状态码:
200 请求和响应都成功
301 302 重定向
404 请求的页面找不到
500 服务器出错
五.HTTP协议的应用
案例:跳转
Code2.php
刷新(跳转)
案例:PHP(代码)模拟HTTP请求
我们需要通过使用PHP的CURL扩展来实现模拟HTTP请求。
CURL扩展
既然要使用扩展,那么我们需要做些准备工作。
准备工作
第一步,确认配置extension_dir
第二步,确认扩展文件php_curl.dll存在并且(在php.ini)开启扩展
第2.5步,将相应的类库文件放置到PHP默认的类库文件夹下
将PHP根目录下的下面两个文件复制到上面这个文件夹中:
第三步,重启apache并且检查扩展开启成功
实现模拟HTTP请求
Curl_init函数 初始化一个curl会话连接
Curl_setopt函数 设置curl选项
Curl_exec函数 执行一个curl会话
Curl_close函数 关闭一个curl会话连接
Code5.php
PHP模拟HTTP请求的原理
步骤:1.请求1-》2.请求2-》3.响应2-》4.响应1