关于HTTP协议

 在网络协议的最上层即应用层,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中,对这里有相应的处理,待续。。。。。。

原文地址:https://www.cnblogs.com/unqiang/p/3080255.html