在网络协议的最上层即应用层,http协议是一个很重要的协议,是客户端和服务端通信的重要协议之一。在请求的时候,常用的是get和post方法去发送Request。
之前对于get和post的区别不是很清楚,在查阅一些资料后,发现:
get和post传输方式区别在于:
1)get传输时把参数带到了地址栏不安全post传输地址栏不显示传输参数安全性高;
2)get适合传输小部分数据(不能大于2KB),而post可传输大量数据(一般被默认为不受限制);
3)get方式,服务器端用Request.QueryString获取变量的值,post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得;
4)get传输参数时以'?'号代表URL地址的结尾与数据参数的开端,后面的参数每一个数据参数以“名称=值”的形式出现,参数与参数之间利用一个连接符&来区分。post传输数据是放在HTTP主体中的,其组织方式不只一种,有&连接方式,也有分割符方式,可隐藏参数,传递大批数据,比较方便。
HTTP 1.0/1.1用区别在于连接的持续性。HTTP/1.0协议使用非持久连接,
HTTP/1.1协议的客户机和服务器可以配置成使用非持久连接.在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象!代表URL地址的结尾与数据参数的开端,后面的参数每一个数据参数以“名称=值”的形式出现,参数与参数之间利用一个连接符&来区分。
下面说说http协议中的报文头和报文体:
当用户通过浏览器(客户端)向服务端发送一个get请求时:(如下)
请求报文头文件:
GET /***.aspx HTTP/1.1
Referer: 被链接的文档的URL
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: 客户机的主机和端口号
Connection: Keep-Alive
简单解释:
GET /***.aspx HTTP/1.1:请求的方法字段、URL字段、HTTP请求版本字段;方法可以是:GET、POST、HEAD等;
Accept:客户机可以接受的媒体格式
Referer:被链接的文档的URL
Accept-Language:客户机能够接受的语言
User-Agent:向服务器发送请求的浏览器类型(在IIS日志里面cs(User-Agent)这个参数可以看到相关访问类
型,例如百度蜘蛛,Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html))
Accept-Encoding:客户机能够处理的编码方式
Host:客户机的主机和端口号
Connection:连接关闭或者保持连接
响应报文头文件:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Sat, 14 May 2011 06:43:17 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 812
这里的Content-Length为报文头的内容,表示了报文体的大小为812字节.
而在响应返回的时候,不是任何情况下都是实时返回的,比如:一个需要处理一小时的数据,用户则需要在前端等待1小时之久,显然是不行的.还有就是不确定返回报文体的大小的时候,这时,就涉及到了chunked response,即chunked编码.这时,就用到了它.Transfer-Encoding域的值应当为chunked.
而在cowboy中,对这里有相应的处理,待续。。。。。。