全面理解HTTP

 

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

URL与URI

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

报文-通讯的桥梁

客户端和服务器端经过相互发送报文进行通讯,要深入理解HTTP协议,就须要理解报文的格式和内容。浏览器

报文的组成


不管是请求报文仍是响应报文都须要有报文首部,固然报文主体并非必需的。
通常来讲,请求报文的格式以下:安全


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


简单的报文形式:服务器

GET / HTTP/1.1 //请求行,包含用于请求的方法,请求的URI,HTTP版本 //如下为各类首部字段 Host: www.baidu.com 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

响应报文的格式以下:ide


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

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,下面就这两种进行详细地说明。网站

  1. GET
    GET方法用来请求访问URI所指定的资源,(我想访问你的某个资源)并不对服务器上的内容产生任何做用结果;每次GET的内容都是相同的。GET方式把请求所须要的参数放到URL中,直接就能够在URL中看见,有大小限制。
  2. POST
    POST方法用来传输实体主体,目的并非获取响应的主体内容,(我要把这条信息告诉你),POST方式则是把内容放在报文内容中,所以只要报文的内容没有限制,它的大小就没有限制。
  3. 总结
    GET用于获取某个内容,POST用于提交某种数据请求。
    按照使用场景来讲,通常用户注册的内容属于私密的,这应该使用POST方式;而针对某一内容的查询,为了快速的响应,可使用GET方式。

无状态协议与Cookie

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

持久链接

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


显而易见每次请求会形成无谓的TCP链接创建和断开,增长通讯量的开销。

引入持久链接

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

Connection:keep-alive

管线化

管线化能够同时并行发送多个请求,不须要一个一个等待响应了。

常见的状态码

确保安全的HTTPS

HTTP+加密+认证+完整性保护 = HTTPS
一些登录界面和购物结算界面使用HTTPS通讯,也就是改用https://,HTTPS说简单点就是它的通讯接口部分被SSL和TLS协议代替而已。

身份认证

有一些网址或者服务须要用户的身份信息,所以须要随时知道这些消息,可是确定不能每次都让用户输入用户密码,所以关于认证就有下面几种方式:


在这里主要说一下FormBase认证,也就是表单认证

使用Cookie来管理Session

  1. 客户端把用户IE和密码等登陆信息放入报文的实体部分,以POST方式发送给服务器。
  2. 服务器进行身份认证,产生SessionID,加入到Set-Cookie内,返回给客户端。
  3. 客户端接收到SessionID后,将其加入Cookie,下次请求时,浏览器会自动发送Cookie。

在传输过程当中,一种安全地保存密码方式是,先利用给密码加盐的方式增长额外信息,再使用散列hash函数计算出散列值后保存。

书籍推荐:《图解HTTP》,轻松理解更全面的HTTP知识。

转自http://www.jianshu.com/p/81632fea327c

相关文章
相关标签/搜索