<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>HTTP on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/http/</link>
    <description>Recent content in HTTP on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 03 Apr 2015 08:22:39 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/http/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>HTTP2简单教程</title>
      <link>https://ykyi.net/?p=1282/</link>
      <pubDate>Fri, 03 Apr 2015 08:22:39 +0000</pubDate>
      <guid>https://ykyi.net/?p=1282/</guid>
      <description>&lt;p&gt;译自：&lt;a href=&#34;http://qnimate.com/post-series/http2-complete-tutorial/&#34;&gt;http://qnimate.com/post-series/http2-complete-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;HTTP1.1是在1999年的时候被引入业界的。从当时到现在，WEB已经发生了相当大的变化。很多人开始用移动设备上网，有些移动环境下网络质量非常不稳定。另外，WEB页面的内容也相当的丰富了。这些都负面影响了WEB页面的加载时间。因此，需要一个新的协议来加速WEB的加载。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2&lt;strong&gt;&lt;strong&gt;和&lt;/strong&gt;&lt;/strong&gt;SPDY****的区别：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SPDY是谷歌于2009年创造的协议，旨在WEB延迟以及增强安全性。&lt;/p&gt;
&lt;p&gt;HTTP/2是SPDY的一个克隆。谷歌已经停止了继续开发SPDY，并且把工作转移到了HTTP/2上来。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2****的目标：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;减少加载延时。&lt;/li&gt;
&lt;li&gt;减少TCP连接数。&lt;/li&gt;
&lt;li&gt;增强的网络安全。&lt;/li&gt;
&lt;li&gt;保持和HTTP/1.1的兼容。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2****的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;多路复用Multiplexing：很多个异步的HTTP请求只使用一个TCP的连接。&lt;/li&gt;
&lt;li&gt;服务端PUSH：对于一个请求可能有多个回复。&lt;/li&gt;
&lt;li&gt;头部压缩：压缩头部(headers)。&lt;/li&gt;
&lt;li&gt;请求分级：对同一个域名的请求可作优先级分级。&lt;/li&gt;
&lt;li&gt;二进制协议：HTTP/2是一个二进制协议，而HTTP/1.1是一个文本协议。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2&lt;strong&gt;&lt;strong&gt;解决了&lt;/strong&gt;&lt;/strong&gt;HTTP/1.1****的哪些问题：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HTTP管道(HTTP pipelining)：一些HTTP1.1客户端使用了HTTP管道技术来减少TCP连接数。HTTP管道指的是多个HTTP请求被发往同一个TCP连接，而不等待前一个请求的回复。但是服务端发送回复时的顺序和收到的请求的顺序一样。因此，造成了HOL阻塞问题(head-of-line blocking)。HOL Blocking简单地说是一个回复的延迟会使得排在它后面的回复都会延迟。HTTP/2透过引用多路复用(Multiplexing)解决了这个问题。多个HTTP请求和多个HTTP回复都使用同一个TCP连续，而且HTTP回复的顺序不需要保持HTTP请求到达的顺序。&lt;/li&gt;
&lt;li&gt;同一个域名的多个TCP连接：在使用HTTP/1.1时，需要对同一个域名起多个TCP连接来增加吞吐量。而使用HTTP/2时，对于每个域名，只充许有一个TCP连接（only one TCP connection per domain is allowed）。所有的请求和回复都通过唯一的一个TCP连接进行。&lt;/li&gt;
&lt;li&gt;TCP连接的关闭时间：使用HTTP1.1时，一个TCP连接在请求完成时立刻被关闭。但对于HTTP/2，TCP连接能存活相当成地一段时间。&lt;/li&gt;
&lt;li&gt;头部压缩：HTTP/1.1是没有头部压缩的，但HTTP/2引入头部压缩进一步的减少了延时。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2&lt;strong&gt;&lt;strong&gt;如何兼容&lt;/strong&gt;&lt;/strong&gt;HTT/1?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HTTP/2客户端在不确定对方服务器是否支持HTTP/2时，会用HTTP/1协议向服务器发送请求时带上Upgrade: HTTP/2.0这个头部。如果对方服务器支持HTTP/2，就会回复HTTP1.1 101，表示切换协议(Switching Protocols status)。而对于老旧的服务器则简单地返回HTTP/1.1的状态。&lt;/p&gt;
&lt;p&gt;HTTP/2客户端可以记下哪些服务器支持HTTP/2，这样，下次就可以直接发起HTTP/2请求，而不必再经过一个询问和回复(Upgrade Round Trip).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2****中的多路复用是怎么回事？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HTTP/2使用多路复用，多个请求和回复全异步的通过同一个TCP连接收发。&lt;/p&gt;
&lt;p&gt;HTTP/2是一个二进制的协议。每一个请求和回复都被分配了一个流标志(Stream ID)，而且请求和回复被切成了很多帧(Frame)，属于同一个请求或回复帧的Stream ID相同。因为有了这个Stream ID和Frame的机制，请求和回复可以在服务器和客户程序两端同时全异步的发送。因此，HTTP2没有了Head-of-line Blocking的问题。&lt;/p&gt;
&lt;p&gt;每一个Stream还可以被赋于一个优先级，服务器可以分配更多的系统资源处理高优级的Stream。&lt;/p&gt;
&lt;p&gt;HTTP/2还有一个传输层级别的流控。它协商了客户程序和服务器两端最多使用多少个Stream,服务器能处理的最大尺寸的Stream以及整个连接最多处理多少字节，以及数据被发送的速率。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;HTTP/2中的服务器推送(Server Push)和承诺(Promise)&lt;/p&gt;
&lt;p&gt;当服务器“感觉”到客户程序需要更多的资源时，就会给客户程序发送一个Promise Stream ，提醒客户程序需要什么资源。这些stream比一般的stream的优先级要高。&lt;/p&gt;
&lt;p&gt;这项技术在加载网页时非常用户，因为网页的大量css和javascrpit可能通过这种方式发送。而HTTP/1的作法是把css和js都combine到一起。&lt;/p&gt;
&lt;p&gt;服务器发送Promise Stream时提醒的资源遵守同源策略(same origin policy)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP/2****中的头部压缩：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HTTP/2的头部压缩和HTTP/1.1中早有的用gzip压缩Body不一样。使用HTTP/2时，在客户程序和服务器两端，都会保存一张表，记录了收到过的头部。它们在发送HTTP时不会重复发送一样的头部，当再次发送相同的头部时，只会发送该头部对应的表的索引号。&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;color: rgb(0, 0, 0); font-family: Verdana, Geneva, sans-serif; font-size: 12px; line-height: 22.8000011444092px;&#34;&gt;copyright ykyi.net&lt;/span&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTTP中的HEAD方法是什么</title>
      <link>https://ykyi.net/?p=1122/</link>
      <pubDate>Wed, 08 Jan 2014 02:29:55 +0000</pubDate>
      <guid>https://ykyi.net/?p=1122/</guid>
      <description>&lt;p&gt;HTTP中的HEAD方法和GET方法是一样的，除了服务器在响应HEAD方法时不充许活加消息体(message body).服务器用来回复HEAD的响应信息中，在HTTP头部中的元信息需要跟回复GET时一样。这样，一个客户就可以通过HEAD来得到某资源的源信息，而不需要把整个资源都传输一次。&lt;/p&gt;
&lt;p&gt;HEAD方法通常被用来测试超链接的可达，和资源是否已经更新。&lt;/p&gt;
&lt;p&gt;HEAD方法的主要应用场景是检索资源的元信息meta infomation。用getResponseHeaders()函数可以得到HTTP的头部~&lt;/p&gt;
&lt;p&gt;copyright ykyi.net&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
