美文网首页
Http总结

Http总结

作者: 知止9528 | 来源:发表于2019-01-25 23:33 被阅读9次

    HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议

    它是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。

    然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie。

    HTTP URL

    http://host[":"port][abs_path]
    

    HTTP请求的所发送的数据格式

    Http数据格式.jpg

    即http请求由请求行,消息报头,请求正文三部分构成


    请求行
    请求行由请求Method, URL 字段和HTTP Version三部分构成, 总的来说请求行就是定义了本次请求的请求方式, 请求的地址

    HTTP协议的方法有:

    • GET: 请求获取Request-URI所标识的资源
    • POST: 在Request-URI所标识的资源后增加新的数据
    • HEAD: 请求获取由Request-URI所标识的资源的响应消息报头
    • PUT: 请求服务器存储或修改一个资源,并用Request-URI作为其标识
    • DELETE: 请求服务器删除Request-URI所标识的资源
    • TRACE: 请求服务器回送收到的请求信息,主要用于测试或诊断
    • CONNECT: 保留将来使用
    • OPTIONS: 请求查询服务器的性能,或者查询与资源相关的选项和需求

    HTTP请求头
    消息报头由一系列的键值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,主要包括:

    Header 解释 示例
    Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
    Accept-Charset 浏览器可以接受的字符编码集 Accept-Charset: iso-8859-5,utf-8
    Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型 Accept-Encoding: compress, gzip
    Accept-Language 浏览器可接受的语言 Accept-Language: en,zh
    Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes
    Authorization HTTP授权的授权证书类型 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
    Connection 表示是否需要持久连接(HTTP 1.1默认进行持久连接) Connection: close
    Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 Cookie: $Version=1; Skin=new;
    Content-Length 请求的内容长度 Content-Length: 348
    Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
    Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
    Expect 请求的特定的服务器行为 Expect: 100-continue
    From 发出请求的用户的Email From: user@email.com
    Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com
    If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
    If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10
    Pragma 用来包含实现特定的指令 Pragma: no-cache
    Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Range 只请求实体的一部分,指定范围 Range: bytes=500-999
    Referer 先前网页的地址,当前请求网页紧随其后, 即来路 Referer: www.zcmhi.com/archives/71
    TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5
    Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)
    Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com(Apache/1.1)
    Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

    HTTP请求正文

    只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。


    HTTP响应
    HTTP响应也由三部分组成,包括状态行,消息报头,响应正文。
    HTTP响应状态行

    状态行也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的文本描述。例如

    HTTP/1.1 200 OK (CRLF)
    

    HTTP响应状态码
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    1xx:指示信息 - 表示请求已接收,继续处理
    2xx:成功 - 表示请求已被成功接收、理解、接受
    3xx:重定向 - 要完成请求必须进行更进一步的操作
    4xx:客户端错误 - 请求有语法错误或请求无法实现
    5xx:服务器端错误 - 服务器未能实现合法的请求
    常见状态代码、状态描述、说明:

    200: OK - 客户端请求成功
    400: Bad Request - 客户端请求有语法错误,不能被服务器所理解
    401: Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403: Forbidden - 服务器收到请求,但是拒绝提供服务
    404: Not Found - 请求资源不存在,eg:输入了错误的URL
    500: Internal Server Error - 服务器发生不可预期的错误
    503: Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常


    HTTP的五大特点
    1.支持客户/服务器模式。

    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过Connection: Keep-Alive实现长连接

    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


    HTTP和HTTPS

    HTTP的不足

    通信使用明文(不加密),内容可能会被窃听
    不验证通信方的身份,因此有可能遭遇伪装
    无法证明报文的完整性,所以有可能已遭篡改

    HTTPS介绍

    HTTP 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。属于通信加密,即在整个通信线路中加密。

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )
    

    HTTPS 采用共享密钥加密(对称)和公开密钥加密(非对称)两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢

    主要流程如下:

    1.浏览器将自己支持的一套加密规则发送给网站。

    服务器获得浏览器公钥
    

    2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

    浏览器获得服务器公钥
    

    3.获得网站证书之后浏览器要做以下工作:

    (a). 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。

    (b). 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码(接下来通信的密钥),并用证书中提供的公钥加密(共享密钥加密)。

    (c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

     浏览器验证 -> 随机密码
     服务器的公钥加密 -> 通信的密钥
     通信的密钥 -> 服务器
    

    4.网站接收浏览器发来的数据之后要做以下的操作:

    (a). 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

    (b). 使用密码加密一段握手消息,发送给浏览器。

     服务器用自己的私钥解出随机密码 -> 用密码解密握手消息(共享密钥通信)-> 验证HASH与浏览器是否一致(验证浏览器)
    

    HTTPS的不足

    • 加密解密过程复杂,导致访问速度慢
    • 加密需要认向证机构付费
    • 整个页面的请求都要使用HTTPS

    相关文章

      网友评论

          本文标题:Http总结

          本文链接:https://www.haomeiwen.com/subject/lgrbjqtx.html