【Android 网络协议 二】HTTP协议


一、HTTP协议简介

    1、协议

    指计算机网络中两个计算机之间进行通信所必须遵守的规定或规则

    2、HTTP协议

    是一种超文本传输协议。它允许将超文本标记语言(HTML)文档从Web服务端传送到客户端浏览器。


    3、URI

    a. URI的全称是uniform resource identifier,是统一资源标识符,用来唯一标识一个资源。就是说,Web上有很多种资源,比如说HTML文档、图像、视频等,它们都是用URI来定位的。

    b. 实例:file://a:1234/b/c/d.txt

    c. 由三部分组成:访问资源的命名机制、存放资源的主机名、资源自身的名称及路径。

    4、URL

    a. URL的全称是uniform resource locator,是统一资源定位器,它是一种具体的URI。URL不仅可以用来标识一个资源,而且还指明如何locate这个资源。

    b. 实例:www.baidu.com

    c. 由三部分组成:协议(http or https)、存有该资源的主机IP地址、主机资源的具体地址


二、HTTP协议的特点

1、简单快速:客户端只需要指明请求方法(get post...)和路径

2、无连接:每次连接只处理一个请求。服务端处理完客户端的请求就断开连接。

3、无状态:对以前处理的事务没有记忆能力。


三、Request/Response协议结构

    1、Request头部

表明本次请求的客户端、本次请求所使用的客户端、本次请求希望返回的数据类型、本次请求是否采用数据压缩等设置

    a. 第一行:访问方法为Get方法,遵循的协议是HTTP/1.1

    b. Host参数(必须):请求资源的主机和端口号(Host通常是从Url中提取出来的,当未指定端口号时,http默认为80端口,https默认为403端口)

    c. User-Agent参数:客户端使用的操作系统和浏览器的名称。

    d. Accept参数:客户端可以接受的媒体类型,其中,"*/*"表示能接受所有媒体类型

    e. Referer参数:浏览器是从哪个Url链接过来的

    f. Accept-Encoding参数:浏览器支持的编码方式

    g. Accept-Lauguage参数:浏览器支持的语言类型

    h. If-None-Match参数:该参数与Response请求头的ETag联合使用,告诉服务端可以在Response请求头添加ETag,客户端再次请求这个资源时,就会把ETag值添加这个参数中,如果资源没有改变,就会返回304状态码,告知客户端可以直接使用缓存,这就大大提高了浏览器性能。

    i. If-Modified-Since参数:该参数告知浏览器缓存文件的最后一次修改时间,如果等于服务端资源的最后一次修改时间,就返回304状态码。


2、Response头部

表明服务器标识、状态码、内容编码、返回给客户端的cookie等


    a. 第一行:表明协议和状态码

    b. Date参数:生成这个Response的具体时间

    c. Last-Modified参数:这个资源最后一次修改时间

    d. ETag参数:和If-None-Match配合使用。

    e. Expire参数:告诉浏览器最多可以使用多长时间缓存

    f. Cache-Control参数

    g. Proxy-Connection参数:当http请求完成,客户端和服务端传输http数据的tcp连接没有断开,如果客户端再次访问服务端上的这个资源,就可以继续使用这个已经建立好的tcp连接。


四、工作流程

1、首先客户端与服务端建立连接

2、建立连接后,客户端发送一个请求给服务端。

3、服务器接到请求后,给予相应的相应信息。

4、客户端接收到服务端返回的信息,断开连接


五、http1.1和http1.0的区别

1、http1.0存在的延迟

        a. 浏览器阻塞:浏览器对于同一个域名,同时只能有4个连接

        b. DNS查询:浏览器需要知道服务器端IP才能建立连接

        c. 建立连接:三次握手

2、http1.0和http1.1区别

        a. 缓存处理:

            http1.0 通过request头部的IfModifyThings

            http1.1 通过request头部的If-None-Match

        b. 网络连接:

            http1.1通过range参数可以获取资源的某一部分

        c. Host头处理

        d. 长连接

            keep-alive可以复用tcp长连接


六、http1.0和http1.1存在的问题【精】

    (1)HTTP 1.0 在传输数据时,每次都需要建立连接,无疑增加了大量的延迟时间。

    (2)HTTP 1.1 在传输数据时,所传输的内容都是明文,客户端和服务端都无法验证对方的身份。

    (3)HTTP 1.1 在使用时,header里携带的内容过大,在一定程度上增加了传输的成本。

    (4)HTTP 1.1 支持了keep-alive,来弥补多次创建连接产生的延迟,但使用多了给服务器带来了大量压力


七、SPDY

    (1)SPDY是Http的一种兼容协议。

我们知道http有各种各样的缺点,谷歌最先想到了要去改变这种现状,他们就研究了一套基于http的SPDY协议。

    (2)多路复用请求

    (3)对请求划分优先级

    (4)压缩http头


八、Http 2.0

    (1)基于SPDY,IETF制定的新一代Http协议

    (2)更安全的SSL

        

九、cookie和session的区别

1、cookie

        cookie技术是客户端的解决方案,cookie就是有服务端发给客户端的特殊信息,而这些信息由文本的方式放在客户端,然后客户端每次向服务端发送请求的时候都会带上这些特殊信息。

    

2、session

        session技术是另一种记录客户状态的机制,并保存在服务器中。客户端访问服务器的时候,服务端将客户端信息以某种形式存放在服务器上。

3、cookie和session的区别

        存放位置不同

        存取方式不同

        安全性不同

        有效期不同

        对服务器造成的压力不同


十、最后

    以上为目前我对HTTP相关知识的总结,以后会陆续更新。如有任何疑问,可留言提问,博主每天都会查看。

        

猜你喜欢

转载自blog.csdn.net/colinandroid/article/details/79325142
今日推荐