2,340   HTTP

一,http请求头,标准内容如下

POST /user/loginPost HTTP/1.1[CRLF]
Host: codeigniter.luckybird.me[CRLF]
Connection: keep-alive[CRLF]
Content-Length: 91[CRLF]
Accept: application/json, text/javascript, */*; q=0.01[CRLF]
Origin: http://codeigniter.luckybird.me[CRLF]
X-Requested-With: XMLHttpRequest[CRLF]
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36[CRLF]
Content-Type: application/x-www-form-urlencoded; charset=UTF-8[CRLF]
Referer: http://codeigniter.luckybird.me/user/login[CRLF]
Accept-Encoding: gzip, deflate[CRLF]
Accept-Language: en-US,en;q=0.8[CRLF]
Cookie: csrf_cookie_name=2d2e8e288ad0f021be4c1ad5b4040d86; ci_session=c0ef6dcfe0f912c023436da05e21d12c6826d8f9[CRLF]
[CRLF]
email=492602925%40qq.com&password=492602925&csrf_test_name=2d2e8e288ad0f021be4c1ad5b4040d86

主要为三部分:
1,请求行,包含了请求方式post,请求的uri,http版本
2,header,包含了基本的header信息,比如Host,Referer,Cookie等
3,body,请求的主体内容,比如post内容

每行以回车符号rn结束,header和body之间有个空行

 

 

三,http响应头,标准内容如下:

HTTP/1.1 200 OK[CRLF]
Server: nginx/0.8.55[CRLF]
Date: Sun, 19 Jul 2015 02:31:42 GMT[CRLF]
Content-Type: text/html; charset=UTF-8[CRLF]
Transfer-Encoding: chunked[CRLF]
Connection: keep-alive[CRLF]
X-Powered-By: PHP/5.6.8[CRLF]
Set-Cookie: csrf_cookie_name=18d65b92568629388bed478054011489; expires=Sun, 19-Jul-2015 04:31:42 GMT; Max-Age=7200; path=/[CRLF]
Expires: Thu, 19 Nov 1981 08:52:00 GMT[CRLF]
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0[CRLF]
Pragma: no-cache[CRLF]
[CRLF]
<!DOCTYPE html>
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 </head>
 <body>
 <p>
 Hello World
 </p>

 </body>
</html>

主要为三部分:
1,响应行,包含了http版本,状态代码,状态描述
2,header,包含了基本的header信息,比如Content-Type,Set-Cookie等
3,body,请求的主体内容,比如post内容

每行以回车符号结束,header和body之间有个空行

 

 

三,http协议是无状态的
同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题,Web程序引入了Cookie机制来保持客户端和服务器之间的会话状态

 

四,http是建立在TCP/IP协议上

1,http 1.0版本短链接,数据发送后TCP连接立刻断掉,下次请求还需要进行三次TCP握手

2,http 1.1版本默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接

 

五,http请求方法GET和POST区别

1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如index.php?title=test&content=123456. POST方法是把提交的数据放在HTTP包的Body中。
2、GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据理论上没有限制。
3、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

 

 

六,部分http状态码

1,状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:
指示信息–表示请求已接收,继续处理
2xx:
成功–表示请求已被成功接收、理解、接受
3xx:
重定向–要完成请求必须进行更进一步的操作
4xx:
客户端错误–请求有语法错误或请求无法实现
5xx:
服务器端错误–服务器未能实现合法的请求

 

 

2,具体状态码

200 OK
客户端请求成功
301 Moved Permanently
永久重定向
302 Move temporarily
临时重定向
304 Not Modifed
自从上次请求后,请求的网页未修改过。响应包体为空
400 Bad Request
客户端请求有语法错误,不能被服务器所理解
403 Forbidden
服务器收到请求,但是拒绝提供服务
404 Not Found
请求资源不存在,比如输入了错误的URL
500 Internal Server Error
服务器发生不可预期的错误
503 Server Unavailable
服务器暂时拒绝访问

 

 

七,部分header头部解释

1,Connection:
长连接还是短连接,长连接是链接成功后不断开TCP,短连接则每次都需要进行三次的TCP握手之后才能进行数据交互
2,Content-Type:
body内容的字符类型,一般在post时需要设置,$_POST只能接收类型为application/x-www-form-urlencoded的数据;
3,Content-Length:
body内容的字节长度,可以通过strlen($body)来求,在传送$_POST内容时必须加上,以便服务器解析

4,Referer

来源地址,可用于简单的验证请求合法性,但很容易伪造

 




Leave a Reply

Your email address will not be published. Required fields are marked *