美文网首页我爱编程
Http报文结构及http,https,http1.0,http

Http报文结构及http,https,http1.0,http

作者: CyrusChan | 来源:发表于2018-04-14 12:03 被阅读83次

    Http请求报文结构

    u=2478327317,466272130&fm=27&gp=0.jpg

    常用字段描述

    请求行

    请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

    请求头部

    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息

    典型的请求头有:

    Accept:用于告诉服务器,客户机支持的数据类型
    Accept-Charset:用于告诉服务器,客户机所采用的编码
    Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
    Accept-Language:客户机的语言环境
    Host:客户机通过这个头告诉服务器,想访问的主机名
    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
    Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)
    User-Agent:客户机通过这个头告诉服务器,客户机的软件环境
    Cookie:客户机通过这个头可以向服务器带数据

    空行

    最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

    请求包体

    请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;

    Http响应报文结构

    u=3933338520,3321962169&fm=27&gp=0.jpg

    常用字段描述

    状态行

    状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;

    状态码

    由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
      1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
      2xx:表示服务器已成功接收到请求并进行处理;
      3xx:表示服务器要求客户端重定向;
      4xx:表示客户端的请求有非法内容;
      5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

    响应头部:

    典型的响应头部有:

    Location:这个头配合302状态码使用,用于告诉客户找谁
    Server:服务器通过这个头,告诉浏览器服务器的类型
    Content-Encoding:服务器通过这个头,数据的压缩格式
    Content-Length:服务器通过这个头,告诉浏览器回送数据的长度
    Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
    Last-Modified:服务器通过这个头,告诉浏览器当前资源缓存时间
    Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次
    Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打开数据
    Transfer-Encoding:服务器通过这个头,告诉浏览器数据的传送格式
    ETag:…
    Expires:服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0,则是不缓存
    Cache-Control:no-cache
    Pragma:no-cache 服务器通过以上两个头,也是控制浏览器不要缓存数据

    响应包体

    服务器返回给客户端的文本信息;

    简述Http工作原理

    HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。

    HTTP 请求/响应的步骤:

    1.客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
    2.客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;
    3.服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
    4.释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

    例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

    1、浏览器向DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
    2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
    3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
    4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
    5、释放 TCP 连接;
    6、浏览器将该 html 文本并显示内容;

    HTTP,HTTP2.0,SPDY,HTTPS区别

    详情可以参考这篇文章

    HTTP1.0和HTTP1.1的一些区别

    1. 缓存处理

    在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

    2. 带宽优化及网络连接的使用

    HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

    3. 错误通知的管理

    在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

    4. Host头处理

    在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

    5. 长连接

    HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

    HTTPS与HTTP的一些区别

    1. HTTPS协议需要到ca申请证书
    2. HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议。
    3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    4. HTTPS的连接很简单,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    SPDY和HTTP2.0

    SPDY
    1. 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式
    2. 请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
    3. header压缩。前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
    4. 基于HTTPS的加密协议传输,提高了传输数据的可靠性。
    5. 服务端(server push),采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件**给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了.

    HTTP2.0

    HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下两点:
    • HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
    • HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

    相关文章

      网友评论

        本文标题:Http报文结构及http,https,http1.0,http

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