HTML5技术

全面理解HTTP - miragele

字号+ 作者:H5之家 来源:博客园 2016-07-27 13:00 我要评论( )

引言:作为一名软件工程Web专业学生,对于HTTP的熟悉掌握是必不可少的,特此做记录,打造自己的HTTP栈。 URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统

 

引言:作为一名软件工程Web专业学生,对于HTTP的熟悉掌握是必不可少的,特此做记录,打造自己的HTTP栈。

URL与URI

我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢?
URL:uniform resource location 统一资源定位符
URI:uniform resource identifier 统一资源标识符
这也就是说,URI是一种资源的标识;而URL也是一种URI,也是一种资源的标识,但它也指明了如何定位Locate到这个资源。
URI是一种抽象的资源标识,既可以是绝对的,也可以是相对的。但是URL是一种URI,它指明了定位的信息,必须是绝对的。

报文-通信的桥梁

客户端和服务器端通过相互发送报文进行通信,要深刻理解HTTP协议,就需要理解报文的格式和内容。

报文的组成


无论是请求报文还是响应报文都需要有报文首部,当然报文主体并不是必需的。
一般来说,请求报文的格式如下:


看一下百度网站的请求报文:


简单的报文形式:

GET / HTTP/1.1 //请求行,包含用于请求的方法,请求的URI,HTTP版本 //以下为各种首部字段 Host: Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0... Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8

响应报文的格式如下:


看一下百度网站的响应报文:

HTTP/1.1 200 OK //状态行,包含表明响应结果的状态码,原因短语和HTTP版本 //以下为各种首部字段 Server: bfe/1.0.8.5 Date: Tue, 06 Oct 2015 14:48:28 GMT Content-Type: text/html;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private 告知服务器意图的HTTP方法

发送HTTP的方法有许多种,最常用的便是GET和POST,下面就这两种进行详细地说明。

无状态协议与Cookie

HTTP是一种无状态协议,也就是每一次发送都是一次新的开始,服务器并不知道也没有必要知道当前连接的客户端是否之前有过交集,那么当需要进行保存用户登录状态时,则出现了麻烦,这个时候使用Cookie来保存状态。
Cookie会根据服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段,通知客户端保存Cookie(保存在自己的电脑里),当下次客户端发送请求时,Cookie值会被添加到请求报文中发送出去。

持久连接

使用浏览器浏览一个包含多张图片的HTML页面时,浏览器会发起多次请求,如图所示:


显而易见每次请求会造成无谓的TCP连接建立和断开,增加通信量的开销。

引入持久连接

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。目前HTTP/1.1中默认为持久连接。

Connection:keep-alive

管线化

管线化可以同时并行发送多个请求,不需要一个一个等待响应了。

常见的状态码

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTTP协议学习随笔 - 糖醋酸辣椒

    HTTP协议学习随笔 - 糖醋酸辣椒

    2017-05-01 18:03

  • HTTP认证 - 妙音天女

    HTTP认证 - 妙音天女

    2017-03-27 17:00

  • HTTP状态码 - 妙音天女

    HTTP状态码 - 妙音天女

    2017-03-25 13:01

  • SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(1) - ByteWorke

    SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(1) - B

    2017-02-28 12:01

网友点评
n