HTTP协议
重要性:无论是以后用的webserverice,还是用rest做大型架构,都离不开对Http协议的认识
甚至可以简化的说webserverice=http协议+XML
Rest+HTTP协议+json
各种APL也一般是用http+XML/json来实现的
往小说像采集,小偷站,也需要对HTTP协议有所了解
以及Ajax对HTTP协议有了解之后,学习Ajax是非常容易的
原理:
- 形象理解http协议
- 动手试试http协议
- http协议3部分介绍
实战:
- PHP+socket编程发送http请求
- PHP批量发帖
- HTTP协议防盗链接
优化:
- HTTP协议与缓存控制
- HTTP协议与COOKIE
- 持久链接
什么是协议?
答:计算中的协议与现实中的协议是一样的,一式双份/多份。
双方/多方都遵从共同的一个规范,这个规范就可以称为协议。
计算机之所以能够全世界互通,协议是功不可没的,如果没有协议,计算机各说各话 ,根本谁都听不懂谁的
ftp,http,stmp,pop,tcp/ip协议…
什么是http协议?
客户端----请求---->服务器-----响应---->客户端
HTTP协议的工作流程
0: 原始状态客户端和服务器之间没有关系.
请求建立连接
什么叫连接?连接就是网络上的虚拟电路
沿着连接,返回响应信息
客户端收到响应Html代码解释出图片、文字
断开连接
HTTP请求信息和响应信息的格式
请求:
(1)请求行
(2)请求头信息
(3)请求主体信息(可以没有)
请求行又分3部分
请求方法 请求路径 所用的协议
请求方法:GET POST PUT DELETE TRACE OPTIONS
问:浏览器可以发送HTTP协议,HTTP协议一定要浏览器发送吗?
答:不是,HTTP既然是一种协议,那只要满足这种协议,什么工具都可以发
请求的资源:例如:/0606/01.php
请求所用的协议版本:HTT/2.0(最常用的还是1.1)
头信息
注意:头信息结束后,有个空行,头信息和主体信息(如果有),需要这个空行做区分。 即使没有主体信息,仍需要此空行
另:头信息是非常丰富的,而且丰富的头信息也是我们学习的一个重点
响应行:协议版本 状态码 状态文字
响应头信息
key:value
key:value
contente-length:接下来主体的长度
hello
所用的协议:目前一般还是HTTP/1.1 已经到了HTTP/2.0
POST比GET多了主体信息
头信息里,要标明主体的长度
但服务器仍没有接到信息,因为,POST时,
要告诉服务器:content-type:application/x-www-form-urlencoded
注意:这些请求方法虽然HTTP协议里规定的,但WEB SERVER未必允许或支持这些方法.
HEAD:和GET基本一致,只是返回内容
比如我们只是确认一个内容(比如照片)还正常存在,不需要返回照片的内容,这时用HEAD比较合适,适合用于监视
TRACE:是你用代理上网,比如用代理访问new.163.com,你想看看代理有没有修改你的HTTP请求,可以用TRACE来测试一下,163.com的服务器就会把最后收到的请求返回给你
OPTIONS:是返回服务器可用的请求方法
状态码、状态文字
状态码 是用来反应服务器响应情况的
最常见的如:200 OK,404 NOT FOUND
500 服务器内部错误 问题就严重了
状态文字是用来描述状态码的,便于观察
http响应中的状态码
状态码分系列
状态码 | 定义 | 说明 |
---|---|---|
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功地收到,理解和接收 |
3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
4XX | 客户端错误 | 请求的语法有错误或不能完全被满足 |
5XX | 服务端错误 | 服务器无法完成明显有效的请求 |
200-服务器成功返回网页
301/2-永久/临时重定向
304Not Modified-未修改
307 重定向中保持原有的请求数据
失败的状态码:
404-请求的网页不存在
503-服务器暂时不可用
500-服务器内部错误
header(‘Location:http://www.baidu.com’);//默认是302重定向(暂时的)
//指定用301(永久)重定向,true参加意指用301信息替换原来的头信息
header(‘Location:http://www.baidu.com’,true,301);
对于一篇新闻,GET请求,重定向无所谓,还能看到原来的内容就行
但如果是POST数据
比如 表单---->05.php,05.php—重定向---->06.php