HTTP协议_php版

1、协议

现实生活中的协议,相互遵守,单方面违背,协议不成立;
(停战协议,全球贸易协议)
//没有协议,世界一片混乱
互联网中的协议, ftp、 http、 stmp、 TCP/IP……

2、http

  • http(HTTP-Hypertext transfer protocol):超文本传输协议,详细的规定了万维网服务器与客户端之间数据传送的通信规则;
  • 基本上,你每天都在用;
    当你在浏览器输入一个网址并敲下回车键的一刻,发生了什么?
    超简版视图

http属于无状态连接,Tcp属于有状态连接
 

3、请求与响应的格式

4、telnet客户端
 

windows打开telnet客户端

 ctrl+]

回车

5、请求与返回
 

请求
GET /http/1.php HTTP/1.1 (请求方法,资源路径,协议版本)
host: localhost 请求头
//空行(不可控)
主体信息(可为空)
返回

 请求方法有哪些

注:这些方法虽然在HTTP协议里的,但是,服务器并不会对这些方法全部实现
注意:添加讲解内容--面试中最容易被问到的GET和POST的区别问题,不要陷入误区
 

7、状态码

8、常见状态码

9、POST请求

POST /http/1.php HTTP/1.1
Host: localhost
Content-type: application/x-www-form-urlencoded
Content-length: 10
name=white

提醒
当后面学习到Ajax ,用Ajax 发送POST查询时,也会碰到POST数据为空的问题,
别忘了今天所学的内容


标准: http://www.ietf.org/rfc/rfc1867.txt
470行左右
 

10、用黑窗口做文件上传
 

//2.PHP
echo move_uploaded_file($_FILES['intro']['tmp_name'],'./'.$_FILES['intr
o']['name'])?1:0;
//POST 请求
POST /http/2.php HTTP/1.1
host:localhost
content-type:multipart/form-data,boundary=AaB03x
content-length:140
--AaB03x
Content-Disposition: form-data; name="intro"; filename="a.txt"
Content-Type: text/plain
ni hao my intro
--AaB03x--

11、HTTP协议与cookie
 

// 1.php
print_r($_COOKIE);
GET /http/1.php HTTP/1.1
host:localhost
cookie:name=admin

session的工作原理:接受cookie携带的 session ID,验证合法性;
面试题:本地浏览器禁用cookie,session还能用吗?


12、利用HTTP协议采集网站信息

1.html
 

one
two
three
four

5.php
 

echo "<pre>";
//fsockopen(҅地址,端口,错误码,错误信息,超时)返回资源类型
$fh = fsockopen ('192.168.1.113' , 80 ,$errno , $errstr , 5);
//
$req = array(
    'GET /http/05.html HTTP/1.1',
    'Host: localhost',
    '',
    ''
);
//拆分请求
$req = implode("\n", $req);
//写入资源
fwrite($fh, $req);

//循环读取返回值
while($row = fread($fh,32)) {
    echo $row;
}

fclose($fh)

13、携带cookie登录网站

cookie.php
if($_COOKIE['name']!='admin'){
    echo '一边去';
}
echo '您来了';
<?php
echo "<pre>";
//fsockopen(҅地址,端口,错误码,错误信息,超时) 返回资源类型
$fh = fsockopen ('192.168.1.113' , 80 ,$errno , $errstr , 5);
//
$req = array(
    'GET /http/cookie.php HTTP/1.1',
    'Host: localhost',
    'cookie:name=admin',
    '',
    ''
);
//拆分请求
$req = implode("\n", $req);
//写入资源
fwrite($fh, $req);

//循环读取返回值
while($row = fread($fh,32)) {
    echo $row;
}

fclose($fh);

推举书目

《HTTP权威指南》
 

猜你喜欢

转载自blog.csdn.net/SherlockHolmess/article/details/87905863