1 简介
HTTP(Hypertext Transfer Protocol)超文本传输协议,详细的规定了万维网服务器和客户端之间传输数据的通讯规则。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
2 HTTP请求
2.1 基本介绍
浏览器连上服务器后,向服务器请求某个web资源,称之为浏览器向服务器发送了一个HTTP请求。
一个完整的HTTP请求包括如下内容:一个请求行、若干消息头,以及实体内容。其中一些消息头和实体内容都是可选的。
以test.php为例:
<?php echo '123';
2.2 请求行细节
请求行的细节主要体现在请求方式:GET和POST。除了GET和POST之外,还有HEAD、OPTIONS、DELETE、TRACE、PUT,但是使用到的基本就是GET和POST。
GET和POST有哪些区别?
- GET请求的数据会跟在URL(统一资源定位)之后。POST提交把提交的数据放置在HTTP包的包体中。因此,GET提交的方式在地址栏中显示出来,POST地址栏则不会改变。
- 传输数据的大小:HTTP协议没有对传输的数据大小进行限制,也没有对URL长度进行限制。实际开发过程主要限制有:GET方式特定浏览器和服务器对URL长度有限制。IE大概2k,Chrome大概8k。而POST理论上没有大小限制的,但是受服务器php.ini配置的影响(post_max_size)。
- 安全性:相对而言,post提交,安全性最高。
- 默认请求都是GET请求,超链接也是GET请求。
2.3 消息头细节
2.3.1 基本介绍
消息头主要是浏览器在请求服务器中,携带的浏览器信息。
那么服务器如何接收浏览器传递过来的浏览器的消息呢?
通过$_SREVER这个变量接收,浏览器传递的消息头。
重点介绍一些常用的消息头($_SERVER变量里的键值):
HTTP_REFERER,用来获得该请求是从哪个页面过来的
SERVER_ADDR,服务器的IP地址,::1表示本地服务器
REMOTE_ADDR,请求我这台服务器的客户端的ip地址
DOCUMENT_ROOT,服务器文档的跟目录
SCRIPT_NAME,请求的脚本(文件)名称
REQUEST_TIME,请求的时间
2.3.2 经典案例1:封杀某一段的IP
<?php $remote = $_SERVER['REMOTE_ADDR']; $banned = '192.168.1'; if(strpos($remote, $banned) !== false){ // 说明找到了要禁止的网段 echo '你已经列入访问的黑名单,无法访问'; exit(); } echo '欢迎访问';
2.3.3 经典案例2:防盗链
3 HTTP响应
所谓的响应,就是服务器给浏览器回应的内容。
一个完整的HTTP响应包括3个部分:状态行、消息头、实体内容。
3.1 HTTP响应细节-状态码
HTTP响应的状态码有很多,但是最常见的就是如下几个,需要重点掌握:
200:请求成功
404:not found,未找到这个资源
302:表示重定向
304:Not Modified,未修改
403:Forbidden,禁止访问
500:服务器内部错误