http协议分为两个部分,第一个部分是请求,第二个部分是响应
请求:
- 请求行(请求方法,路径, 协议名称)
- 头信息(key: value)
- 空行然后主体信息(发送内容)
POST 10606/02.php HTTP/1.1
HOST: localhost
content-type:application/x-www-from-urlencoded
contect-length: 24
username = zhangsan&age=23
响应:
- 响应行(协议 状态码, 状态文字)
- 响应头信息
- 空行
- 主体信息
请求方法:
GET
POST
HEAD
PUT
TRACK
DELETE
OPTIONS
注意这些请求方法虽然HTTP协议里规定的,但是WEB SERVE未必允许支持这些
HEAD和GET基本一致,只是不返回内容
比如我们只是确认一个内容(比如照片)是不是正常存在,不需要照片的内容,这时候HEAD就比较合适
TRACE:是你用代理上网,如用代理访问new.163.com,你想看看代理有没有修改你的http请求,可以
用TRACE进行检测一下
OPTIONS:是返回服务器可以使用的方法
状态码:反应服务器的响应情况,最常见的是404
状态文字:状态文字只是用来描述状态码的,比如说OK
状态码 | 定义 | 说明 |
---|---|---|
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功的收到 |
3XX | 重定向 | 为了完成请求必须采取进一步的措施 |
4XX | 客户端错误 | 请求的语法错误或不能完全满足 |
5XX | 服务端错误 | 服务器不能完成明显有效的请求 |
我们主要记住常用的几个
Response:
200-服务器成功返回网页
301/2- 永久和临时重定向
header('Location: http://www.baidu.com');//默认是302
//指定用301重定向,true参加意指替换原来的头信息
header('Location: http://www.baidu.com', true, 301);//现在状态码是301
对于一篇新闻,GET请求重定向无所谓,还能看到原来的内容
但是如果是POST数据,比如表单指向05.php,而05.php重定向06.php,这会导致数据丢失
header('Location: 06.php');
exit:
print_r($_POST);
这个问题如何进行处理
保持重定向之前的数据
我们可以使用307
header('Location: 06.php',true, 307);
exit:
print_r($_POST);
307 重定向保持原来的数据
重要:
304 NOT Modified 未修改——>没有改变,这可以使服务器减轻压力
这里主要使用ETAG技术
ETag是HTTP响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,Web服务器不需要发送完整的响应。而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。
404 请求的网页不存在
503 服务器暂时不可用