HTTP请求
首页引用阮一峰大神博客上的一张图解,大致了解http请求的一个过程:
接下来我们来看看当今最流行的http1.1版本:
一、客户端请求:
1、GET请求
GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Host: www.google.cn Connection: Keep-Alive
请求的第一行代表该请求的类型(GET或者POST).
Accept
字段声明自己可以接受哪些数据格式
Encoding
字段说明数据的压缩方法。
Connection: keep-alive,持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用。如果客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close
,明确要求服务器关闭TCP连接。这是相比HTTP1.0版本最大的不同和优势。
2、POST请求
POST / HTTP1.1 Host:www.wrox.com User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Content-Type:application/x-www-form-urlencoded Content-Length:40 Connection: Keep-Alive
Content-Type字段用来声明数据是什么格式(text/html,text/css等等)
Host
字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础。
Content-length
字段用来声明本次回应的数据长度
二、服务器响应:
HTTP/1.1 200 OK Date: Fri, 22 May 2009 06:07:21 GMT Content-Type: text/html; charset=UTF-8
HTTP状态码200,找到资源,并且一切正常.
Date:生成响应的日期和时间.
Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
最后,扒取一些常见的状态码:
200:OK
301:代表着某个URL发生了转移,且是永久性转移
302:代表着某个URL发生了转移,但只是暂时性转移
304:Not Modified,服务器告诉客户,原来缓冲的文档还可以继续使用
307:临时重定向,可以保持客户端原始URL不变,由服务器根据情况动态指定重定向地址
400:bad request,请求无效
401:unauthorized,拒绝访问
403:forbidden,没有权限访问此站
404:not found,没有找到该网页
410:Gone,通知用户该资源已经不再可用
500:Internal Server Error,服务器正常维护
501: Not Implemented,服务器还是不具有请求功能的