前一阵子参加许多面试都闻到了HTTP协议,不论是后台还是Android。现在做一个简单的总结,就当是复习。
HTTP报文格式
这是我用chrome的检查功能(ctrl+shift+i)随意截取了一个请求信息。
我们首先来看请求头的信息:
最重要的是第一行,内容有3个:请求方式(以get和post为主),URI,HTTP版本号。之后是多个键值对,用来记录其他信息,例如主机地址Host。如果是post方式提交,在这些键值对之后有一个空行,空行后面是请求的实体内容。
1.get和post区别
(1) get方式提交表单可以看到提交方式附在了URI的后面(“?”分隔,不同字段之间用"&"分隔),而post提交的表单信息在请求实体中。
(2) get提交有长度限制,大小不能超过1KB。post没有这一限制
(3) 浏览器默认的提交方式是get
2.URI与URI
URL: 统一资源定位符。只能定位互联网资源。是URI的子集。
URI : 统一资源标识符。用于标记任何资源。可以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html)3.HTTP1.0和HTTP1.1
http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)
关于请求,有一个有趣的问题,一个网页上有3个URI相同的图片,浏览器发送了多少次请求?
应该是4次(1次网页,3次图片),可我们如果通过chrome的检查来看的话只有2次,原因就是浏览器帮我们进行了缓存,从而减少了对相同资源的请求。如果各位有过保存网页的经历,那么我们下载下来的网页除了HTML文件还有一个图片的文件夹,你会看到这里面有很多很小的图片,比方说一个蓝色的方块或者长条,这应该就是通过浏览器缓存使得网页加载变快的方案。