美文网首页
HTTP协议

HTTP协议

作者: Mrfang1 | 来源:发表于2021-11-02 22:10 被阅读0次

HTTP

HTTP的特性

  • HTTP协议构建于TCP/IP协议之上,是一个应用层协议,默认端口号是80
  • HTTP是无连接无状态

HTTP报文

请求报文

HTTP协议是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。
规范把HTTP请求分为三个部分:状态行、请求头、消息主体

<method> <request-URL> <version>
<headers>
<entity-body>

HTTP定义了与服务器交互的不同方法,最基本的方法有四种
分别是GET/POST/PUT/DELETE

一个URL地址用于描述一个网络上的资源,而HTTP以上的四种方法对应这对这个资源的查、增、改、删四种操作

  1. GET用于信息获取,而且应该是安全的和幂等的
    安全意味着该操作用于获取信息而非修改信息。
    幂等意味着对同一URL的多个请求应该返回相同的结果

    GET请求报文示例:

    GET /books/?sex=man&name=Professional HTTP/1.1
    Host:www.example.com
    User-Agent:Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection:Keep-Alive
    
  2. POST代表一个可能会改变服务器资源的请求

    POST / HTTP/1.1
    Host:www.example.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type:application/x-www-form-urlencoded
    Content-Length: 40
    Connection:Keep-Alive
    
    sex=man&name=Professional
    
  3. ATTENTION:

    • GET可提交的数据量受到URL长度的限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器和服务器对它的限制
    • 理论上说,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,处于安全考虑服务器在实现时会做一定限制

    POST提交数据的方式

    HTTP协议规定POST提交的数据必须在body部分中,但是协议中没有规定数据使用哪种编码方式或者数据格式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的HTTP请求满足上面的格式即可。

    但是数据发送出去,还要服务端解析成功才有意义。服务端通常根据请求头(headers)中的Content-Type字段来获取请求中的消息主体的编码方式,再对主体进行解析。POST提交数据方案,包含了Content-Type和消息主题编码方式两部分

    • application/x-www-form-urlencoded
      这是最常见的POST数据提交方式。浏览器的原生<form>表单,如果不设置enctype属性,那么最终就会以 application/x-www-form-urlencoded方式提交数据
    • multipart/form-data
      这是另一种常见的POST数据提交方式。我们使用表单上传文件时,必须让<form>表单的enctype等于multipart/form-data。示例如下:

HTTP1.0与HTTP1.1的区别

  1. 缓存处理:
    • HTTP1.0 使用if-Modified-Since,Expired来作为缓存判断的标准
    • HTTP1.1 使用Entity tag, if-Unmodified-Since, if-Match, if-None-Match控制缓存
  2. 带宽优化及网络连接的使用
    • HTTP1.0 存在带宽浪费的现象,不支持断点续传
    • HTTP1.1 引入range头域,允许只请求资源的某个部分
  3. 错误通知的管理
    • HTTP1.0新增 24个错误状态响应码,
      如409(conflict)表示请求的资源与当前状态发生冲突,410(Gone)表示服务器上的某个资源被永久性删除
  4. Host头处理
    • HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中URL不会传递主机名(hostname),随着虚拟主机技术的发展,一台物理服务器上可以存在多个虚拟主机,并且共享一个IP地址。
    • HTTP1.1请求消息和响应消息都支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
  5. 长连接
    • HTTP1.1支持长连接(PersistentConnection)和请求的流水线处理(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了简历和关闭连接的消耗和耗时。在HTTP1.1中默认开启Connection:keep-alive

HTTPS与HTTP的区别

  1. HTTPS协议需要到CA申请证书,一般免费证书少,需要缴费
  2. HTTP协议运行在TCP之上,所有传输的内容都是明文的,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都是经过加密的
  3. HTTP和HTTPS使用完全不同的连接方式,用的端口也不一样(80->443)
  4. HTTPS可以有效的防止运营商劫持

SPDY:HTTP1.x的优化

  1. 多路复用:SPDY采用多路复用,解决了HTTP高延迟的问题
  2. 请求优先级:多个请求同时发送时,可优先发送高优先级的请求
  3. header压缩
  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性
  5. 服务端推送

SPDY: HTTP->SPDY->SSL->TCP

HTTP2.0和SPDY的区别

  1. HTTP2.0支持明文HTTP传输,而SPDY强制使用HTTPS
  2. HTTP2.0消息头的压缩算法采用HPACK,而SPDY采用DEFLATE

HTTP2.0与HTTP1.x相比的新特性

  1. 新的二进制格式(Binary Format)
    HTTP1.0 解析是基于文本的,HTTP2.0解析采用二进制格式
  2. 多路复用
    每一个request 都支持连接共享机制,一个request对应一个id,这样一个连接上可以有多个request。每个request可以随机混杂在一起,接收方可以根据id将request归属带不同的服务端请求中
    • HTTP1.x一次请求建立一个连接,用完关闭;每一个请求建立一个连接
    • HTTP1.1 Pipelining 采用串行排队处理请求,一旦前面有请求超时,后面的都会被阻塞
    • HTTP2.0 多个请求可同时在一个连接上并行执行,某个请求被阻塞不会影响其它连接
  3. header压缩
    HTTP2.0维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量
  4. 服务端推送
    服务端推送可以将客户端需要的资源伴随index.html一起发送到客户端,省去客户端重复请求的步骤。因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送可以极大提高速度

相关文章

网友评论

      本文标题:HTTP协议

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