HTTP详解(2)-请求、响应、缓存

阅读:386 2019-03-19 14:41:05 来源:新网

做过socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。http协议传输的消息也是这样规定的,每一个http包都分为http头和http体两部分,消息体是可选的,而消息头是必须的。每当我们打开一个网页,在上面点击右键,选择“查看源文件”,这时看到的html代码就是http的消息体,那么消息头可以通过浏览器的开发工具或者插件可以看到,如果火狐的firebug,ie的httpwatch。

客户端通过发送http请求向服务器请求对资源的访问。它向服务器传递了一个数据块,也就是请求信息,http请求由三部分组成:请求行、请求头和请求正文。

请求行:请求方法uri协议/版本

请求头(requestheader)

请求正文

下面是一个http请求的数据:

post/index.phphttp/1.1host:localhostuser-agent:mozilla/5.0(windowsnt5.1;rv:10.0.2)gecko/20100101firefox/10.0.2accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8accept-language:zh-cn,zh;q=0.5accept-encoding:gzip,deflateconnection:keep-alivereferer:http://localhost/content-length:25content-type:application/x-www-form-urlencodedusername=aa&password=1234

在http协议中,http请求可以使用多种请求方法,这些方法指明了要以何种方式来访问request-uri所标识的资源。http1.1支持的请求方法如下表所示:

请求服务器存储一个资源,并用request-uri作为其标识符

重点介绍get、post和head三个方法:

(1)get

get方法用于获取由request-uri所标识的资源的信息,常见的形式是:

getrequest-urihttp/1.1get方法是默认的http请求方法,例如当我们通过在浏览器的地址栏中直接输入网址的方式去访问网页的时候,浏览器采用的就是get方法向服务器获取资源。

我们可以使用get方法来提交表单数据,用get方法提交的表单数据只经过了简单的编码,同时它将作为url的一部分向服务器发送,因此,如果使用get方法来提交表单数据就存在着安全隐患上。例如:http://localhost/login.php?username=aa&password=1234

从上面的url请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于get方法提交的数据是作为url请求的一部分所以提交的数据量不能太大。这是因为浏览器对url的长度有限制

各种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)

(2)post

post方法是get方法的一个替代方法,它主要是向web服务器提交表单数据,尤其是大批量的数据。在请求头信息结束之后的两个回车换行之后(实际是空一行),就是表单提交的数据。如上面提到的post表单数据:

username=aa&password=1234

post方法克服了get方法的一些缺点。通过post方法提交表单数据时,数据不是作为url请求的一部分而是作为标准数据传送给web服务器,这就克服了get方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用post方法。

get与post方法有以下区别:

1、在客户端,get方式在通过url提交数据,数据在url中可以看到;post方式,数据放在http包的body中。

2、get方式提交的数据大小有限制(因为浏览器对url的长度有限制),而post则没有此限制。

3、安全性问题。正如在(1)中提到,使用get的时候,参数会显示在地址栏上,而post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。

4.、服务器取值方式不一样。get方式取值,如php可以使用$_get来取得变量的值,而post方式通过$_post来获取变量的值。

(3)head

head方法与get方法几乎是相同的,它们的区别在于head方法只是请求消息报头,而不是完整的内容。对于head请求的回应部分来说,它的http头部中包含的信息与通过get请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到request-uri所标识的资源的信息。这个方法通常被用于测试超链接的有效性,是否可以访问,以及最近是否更新。

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服