略讲解HTTP协议的使用
HTTP
webservice = http协议 + XML
Rest = HTTP协议 + json
...
协议有 ftp http stmp pop tcp/ip 等
HTTP请求信息和响应信息的格式
1.请求行
(1)请求方法 GET POST HEAD PUT DELETE TRACE OPTIONS
(2)请求路径 http.php
(3)所用协议 HTTP/1.1
2.请求头信息
Host: localhost
3.请求主体信息
注意:头信息和主体信息要空一行
1.响应行
(1)协议版本 HTTP/1.1 200 OK
(2)状态码 200
(3)状态文字 OK
2.响应头信息
健名:健值
key:value
Content-Length:12
3.响应主体信息
DOS窗口发送HTTP请求方法
1. ipconfig命令查看本机IP
IPv4 地址 . . . . . . . . . . . . : 192.168.1.101
2. telnet 192.168.1.101 80 打开80端口
3. 用 ctrl + ] 再回车 打开回显功能
4. 输入如下内容:
GET /http.php HTTP/1.1
Host: localhost
Content-length: 23
username=admin&pass=123
(两次回车)
然后可看到如下的请求信息
HTTP/1.1 200 OK
Date: Fri, 04 Mar 2016 06:56:41 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/0.9.8zb mod_fcgid/2.3.9
X-Powered-By: PHP/5.4.33
Transfer-Encoding: chunked
Content-Type: text/html
ok这是返回的信息
5.post请求时请求头信息中要加
Content-type: application/x-www-form-urlencoded
示例:
POST /http.php HTTP/1.1
Host: localhost
Content-type: application/x-www-form-urlencoded
Content-length: 25
demo=admin1&test=ppppoopp
问题解决:
“telnet 不是内部命令” 解决方法:
控制面板->程序->打开或关闭Windows功能,勾上telnet客户端
常见请求方法解释
HEAD查看请求的地址是否正常
PUT向服务器传输内容
TRACE代理访问时查看是否修改请求
OPTION查看服务器允许的请求方法
常见状态码解释
1XX接收到请求继续处理(预留扩展使用)
2XX成功
3XX重定向
4XX客户端错误
5XX服务器端错误
200 服务器返回网页
301/302永久/临时重定向
永久重定向:
header('Location:http://www.chuxiangyi.com',true,301);
304Not Modified 未修改(取缓存)
文件比对信息,缓存是否被修改,请求头信息中添加
If-Modified-Since:Fri, 26 Feb 2016 07:46:08 GMT
If-None-Match:"3000652404"
307重定向中保持原有的数据(防止post请求时数据丢失)
header('Location:http://www.chuxiangyi.com',true,307);
404请求页面不存在
503服务器暂时不可以
500服务器内部错误
PHP + socket请求原理
$fp = fsockopen('192.168.1.101',80, $errno, $errstr, 30); if (!$fp){ echo "$errstr ($errno)<br />\n"; }else{ $out = "GET /demo.php HTTP/1.1\r\n"; $out .= "Host: localhost\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)){ echo fgets($fp, 128); } fclose($fp); }