本篇主要复习十八哥讲的http协议的原理,及基础知识。
原文地址:http://www.zixue.it/article-262-1.html
一:理解协议
生活中的协议一样,一式双份多分。计算机世界有了协议,才能能沟通。ftp http smtp pop tcp/ip
你怎么问,我怎么答。一种共识就是。
二:工作流程
客户端------服务器。
0:没有关系
1:建立连接。形成虚拟电路.
2.客户端发送请求。服务器,返回响应信息。
3.断开连接。
三具体的请求和响应+get
请求:
1.请求行:请求方法:get post put delete trace options;请求路径;所用协议版本;
2.请求头信息
3.请求主体信息
-
实例:cmd telnet localhost 80 ctrl+] 并回车 打开回显功能
-
GET /0606/01.php HTTP/1.1 Host:localhost HTTP/1.1 200 OK Date: Sat, 21 Jun 2014 15:53:06 GMT Server: Apache/2.2.14 (Win32) PHP/5.4.0 X-Powered-By: PHP/5.4.0 Content-Length: 5 Content-Type: text/html hello
注意:头信息和主体信息之间有空格。
响应
响应行:协议版本;状态码;状态文字;
响应头信息:key:value
key:value
Content-Length: 5
响应主体:内容
四:post
POST /0606/02.php HTTP/1.1 Host: localhost Content-type: application/x-www-form-urlencoded Content-length: 23 username=zhangsan&age=28
五:http协议中的方法
get post head put trace delete options
head:只是确认内容还正常,不需要返回内容。
telnet www.zixue.it 80 ctrl+] 回车
HEAD / HTTP/1.1 Host:www.zixue.it HTTP/1.1 200 OK Server: nginx/1.2.0 Date: Sun, 22 Jun 2014 13:41:20 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive X-Powered-By: PHP/5.3.13 Set-Cookie: SSqb_2132_saltkey=N2xq2290; expires=Tue, 22-Jul-2014 13:41:20 GMT; p ath=/; httponly Set-Cookie: SSqb_2132_lastvisit=1403440880; expires=Tue, 22-Jul-2014 13:41:20 GM T; path=/ Set-Cookie: SSqb_2132_sid=700au1; expires=Mon, 23-Jun-2014 13:41:20 GMT; path=/ Set-Cookie: SSqb_2132_lastact=1403444480%09forum.php%09; expires=Mon, 23-Jun-201 4 13:41:20 GMT; path=/ Set-Cookie: SSqb_2132_stats_qc_reg=deleted; expires=Thu, 01-Jan-1970 00:00:01 GM T; path=/ Set-Cookie: SSqb_2132_cloudstatpost=deleted; expires=Thu, 01-Jan-1970 00:00:01 G MT; path=/
未必允许或支持的:put trace options
PUT /0606/post.txt HTTP/1.1 Host:localhost HTTP/1.1 405 Method Not Allowed Date: Sun, 22 Jun 2014 13:57:37 GMT Server: Apache/2.2.14 (Win32) PHP/5.4.0 Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Length: 234 Content-Type: text/html; charset=iso-8859-1
trace是代理有没有修改你的http请求
TRACE / HTTP/1.1 Host:localhost HTTP/1.1 200 OK Date: Sun, 22 Jun 2014 14:00:13 GMT Server: Apache/2.2.14 (Win32) PHP/5.4.0 Transfer-Encoding: chunked Content-Type: message/http 25 TRACE / HTTP/1.1 Host: localhost 0
options 探测一下,有哪些允许。
OPTIONS / HTTP/1.1 Host:localhost HTTP/1.1 200 OK Date: Sun, 22 Jun 2014 14:02:03 GMT Server: Apache/2.2.14 (Win32) PHP/5.4.0 Allow: GET,HEAD,POST,OPTIONS,TRACE Content-Length: 0 Content-Type: httpd/unix-directory
六:状态码,状态文字
常见200 404
2xx 成功
3xx 重定向 301/302 永久/临时 重定向 304 未修改 日期和etag 请求服务器的时候,如果日期,或者tag发生变化,请给我最新的。
php重定向:header('Location: http://www.baidu.com'); // 默认是302重定向
header('Location: http://www.baidu.com',true,301);//指定301,true:用301代替原来的头信息
307:重定向中保持传输中的数据。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> <head> <title>新建网页</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="description" content="" /> <meta name="keywords" content="" /> <script type="text/javascript"> </script> <style type="text/css"> </style> </head> <body> <form action="05.php" method="post"> <input type="text" name="username" /> <input type="submit" value="提交" /> </form> </body> </html>
05.php
header('Location: 06.php',true,307); exit; print_r($_POST);
06.php
print_r($_POST);
4xx 客户端错误
5xx 服务器错误