请求
- 浏览器首先向服务器发送http请求,请求包括:
方法:get/post,get仅请求资源,post会附带用户数据;
路径:/html/path;
域名:由host头指定:Host:www.sina.com.cn;
其他header;
如果是post,请求还会包括一个body,包含用户数据。
2、 服务器向浏览器返回HTTP响应,响应包括:
响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务端处理时发生了错误;
响应类型:由content-type指定;
其他相关header;
响应内容:有一个body,包含响应的内容,网页的html源码就在body中。
3、如果浏览器还要继续向服务器请求其他资源,比如图片,就再次发出http请求,重复步骤1和2;
Web采用的http协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在http请求中把html发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个http请求,因此,一个http请求只处理一个资源。
http协议同时具备极强的扩展性,虽然浏览器请求的是http://www.sina.com.cn的首页,但是新浪在html中可以链入其他服务器的资源,比如
<img src="http://i1.sinaimg.cn/home/2015/1008/U8455PxDT20131008135420.png">
从而将请求压力分散到各个服务器上,并且一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了world wide web ,简称www.
http格式
每个http请求和响应都遵循相同的格式,一个http包含header和body两部分,其中body是可选的。
http协议是一种文本协议,所以,它的格式也非常简单。格式如下:
Get请求: GET/test.jsp HTTP/1.1 Accept:image/test.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=bingyue&password=bingyue ...
body data。。。 Post请求: Post/test.jsp HTTP/1.1 Accept:image/test.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=bingyue&password=bingyue ...
body dataHeader2:Value2 ... Body data |
每个header一行一个,换行符是\r\n,当连续遇到两个换行符时,Header部分结束,后面的数据全部是body。
http响应格式示例:
HTTP/1.1 200 OK Server:Apache Tomcat/7.0.1 Date:Mon,6Oct2014 13:23:42 GMT Content-Length:102
<html> <head> <title>HTTP响应文件<title> </head> <body> 这是HTTP响应文件! </body> </html> |
http响应如果包含body,也是通过两个分隔符来分割的。请再次注意:body的数据类型由content-Type头来确定,如果是网页,body就是文本,如果是图片,body就是图片的二级制数据。
当存在content-encoding时,body数据是被压缩的,最常见的压缩方式是gzip,所以,看到content-encoding:gizp时,需要将body数据先解压缩,才能得到真正的数据。压缩的目的在减少body的大小,加快网络传输。
设置压缩方式:response.setHeader("Content-Encoding","gzip");
请求压缩方式:Accept-Encoding: gzip, deflate, br
http协议的特点
- 基于B/S模式,即客户服务器模式。
- 通信开销小,简单快速,传输成本低
- 使用灵活:超文本协议,允许服务器和客户端传输任意类型或者任意数据结构的数据对象。
- 节省传输时间。
- 可能影响传输效率,无状态。
- https://www.cnblogs.com/binyue/p/4500578.html
doGet和doPost
1、生成方式
Get有四种:
A、直接在url地址栏中输入url
B、网页中的超链接
C、form中的method为get
D、form中的method为空时,模式是get提交
Post只知道有一种,form中method属性为post
2、数据传送方式
Get方式:表单数据存放在url地址后面,所有get方式提交时HTTP中没有消息体。
Post方式:表单数据存放在http协议体中以实体的方式传送到服务器。
3、服务器获取数据方式
Get方式:服务器采用request.QueryString来获取变量的值。
Post方式:服务器采用request.Form来获取数据。
4、传送的数据量
Get方式:数据量有长度限制,一般不超过2kb.因为是参数传递,且在地址栏中,所有数据量有限制。
Post方式:适合大规模的数据传送。因为是以实体的方式传送的。
5、安全性
Get方式:安全性差,因为是直接将数据显示在地址栏中,浏览器有缓存,可记录用户信息,所以安全性低。
Post方式:安全性高。因为post方式提交数据时是采用的http post机制,是将表单中的字段与值防止在http header内一起传送到action所指的url中,用户是看不见的。
6、在用户刷新时:
Get方式:不会有任何提示。
Post方式:会弹出提示框,问用户是否重新提交。
7、总结
-
get是把参数数据队列加到提交表单的action属性所指的url中,post是通过http post机制,将表单内的各个字段与其内容放置在html header中一起传送到action属性所致的url地址。用户看不到这个过程。
-
Get方式,服务器端用request.queryString获取变量的值,对于post方式,服务器端用request.form获取提交的数据。
-
Get传送的数据量比较小,不能大于2kb,post传送的数据量比较大,一般默认为不受限制。但理论上IIS4为80k,IIS5为100k.
-
Get安全性非常低,post安全性高,但是执行效率get比post好,建议:包含机密信息的话用post方式,数据添加、修改、删除用post方式,数据查询读取相关用get方式。