主要参考文档:《图解HTTP》

HTTP简介

什么是HTTP?

HTTP:(HyperText Transfer Protocol),超文本传输协议,是一个基于请求和响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

HTTP发展历史

版本 产生时间 内容 发展现状
HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
HTTP/1.0 1996年 传输内容格式不限制,增加PUT、PATCH、HEAD、OPTIONS、DELETE命令 正式作为标准
HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场
  • 持久连接:HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。但如果访问的一个HTML页面里又包含其他的资源,每次的请求都会造成无谓的开销。持久连接就是为了解决上述TCP连接问题。持久连接的特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP1.1中,所有的连接默认都是持久连接,但在HTTP1.0内并未标准化。
  • 多路复用:通过单一的HTTP/2连接请求发送多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是以来建立多个TCP连接。

与HTTP关系密切的协议:IP、TCP及DNS

  1. 负责传输的IP协议:IP(Internet Protocol)网际协议位于网络层,IP协议的作用是把各种数据传送给对方。
  2. 确保可靠性的TCP协议:TCP位于传输层,提供可靠的字节流服务。所谓字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。
  3. 负责域名解析的DNS服务:DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

简单的HTTP协议

HTTP协议用于客户端和服务器端之间的通信

请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。HTTP协议规定,请求从客户端出发,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有收到请求之前不会发送响应。

用于HTTP协议交互的信息被称为HTTP报文。HTTP报文大致可分为报文首部和报文主体两块。通常,并不一定要有报文主体。

  • 请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的:

  • 响应报文:由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

HTTP特点

  1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
  2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
  3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
  4. 简单快速、灵活
  5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

告知服务器意图的HTTP方法

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

  • GET:获取资源,用来访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。
  • POST:用来传输实体的主体。
  • HEAD:用来获得报文首部,不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
  • PUT:用来传输文件,要求在请问报文的主体中包含文件内容,然后保存到请求URI指定的位置。
  • DELETE:用来删除文件,按请求的URI删除指定的资源。
  • OPTIONS:用来查询针对请求URI指定的资源支持的方法。只有1.1支持。
  • TRACE:用来让Web服务器端将之前的请求通信换回给客户端。只有1.1支持。
  • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。只有1.1支持。
  • PATCH: 是对PUT方法的补充,用来对已知资源进行局部更新。

返回结果的HTTP状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。

状态码 类别 原因短语
1XX Informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器端错误状态码) 服务器处理请求错误

常用的状态码:

  • 200:OK,表示从客户端发来的请求在服务器端被正常处理了。
  • 204:No Content,表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
  • 206:Partial Content,表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
  • 301:Moved Permanently,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
  • 307:Temporary Redirect,临时重定向
  • 400:Bad Request,表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
  • 401:Unauthorized,表示发送的请求需要有通过HTTP认证的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。
  • 403:Forbidden,表明对请求资源的访问被服务器拒绝了。
  • 404:Not Found,表明服务器上无法找到请求的资源。
  • 500:Internal Server Error,表明服务器端在执行请求时发生了错误。
  • 503:Service Unavailable,表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

HTTP+加密+认证+完整性保护 = HTTPS

HTTPS是身披SSL外壳的HTTP

HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。

HTTPS使用混合加密机制

HTTPS采用共享密钥加密(加密解密使用同一个密钥,密钥在发送过程中可能会被截取,不安全)和公开密钥加密(使用私有密钥和共有密钥,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。安全但效率低)两者并用的混合加密机制。

  1. 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥。
  2. 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信。

遗憾的是,公开密钥加密方法还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。为了解决这个问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。

HTTPS特点

  1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  2. 验证身份:通过证书认证客户端访问的是自己的服务器
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

HTTP&HTTPS的更多相关文章

  1. 【流量劫持】躲避 HSTS 的 HTTPS 劫持

    前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...

  2. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  3. 7.让网站支持http和https的访问方式

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 怎么让网站在本地支持SSL?http://www.c ...

  4. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  5. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  6. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  7. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  8. 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】

    今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...

  9. https 安全验证问题

    最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...

  10. Ubuntu下配置apache开启https

    一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...

随机推荐

  1. Linux性能测试 ps命令

    名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数: ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍 ...

  2. 设置oracle密码不过期,修改用户密码

    1. 查看用户名使用的profile select username,profile from dba_usersSELECT * FROM dba_profiles WHERE profile='D ...

  3. 关于Qt的事件循环以及QEventLoop的简单使用(QEventLoop::quit()能够终止事件循环,事件循环是可以嵌套的)

    http://www.cnblogs.com/-wang-cheng/p/4973021.html 1.一般我们的事件循环都是由exec()来开启的,例如下面的例子: 1 QCoreApplicato ...

  4. 工具:sql server profiler(分析器)

    打开profiler新建->连接数据库进行监测 任何访问该数据库的都有记录   image 对于linq的检验:sql实际如何->运行程序,查看分析器记录   image         ...

  5. Visual C++ 编译器自动假定带 .C 扩展名的文件是 C 文件而不是 C++ 文件,并且拒绝 C++ 语法和关键字(c语言只能在大括号最前面申明变量)

    今天在编译OpenGL红宝书附带源码中的light.c文件时遇到一个诡异的问题: 如图light .c,在不做任何修改的情况编译OK.然而只要在某些地方写了可执行代码,则会无法通过编译器编译! (这几 ...

  6. c# Ajax后台动态分页

    创建WebPager类 public static class WebPager { public static string WebPagerAjax(string Idn, bool IsShor ...

  7. mingw 构建 mysql-connector-c-6.1.9记录(26种不同的编译错误,甚至做了一个windows系统返回错误码与System V错误码的一个对照表)

    http://www.cnblogs.com/oloroso/p/6867162.html

  8. delphi dom动态创建节点方法

    在一次测试demo中 需要动态的创建xml节点并添加,实现方法如下: var NewItem:IXMLDOMElement; NewItem:=ConfigDoc.createElement('ite ...

  9. 2018-4-25 1.如何在GitHub上新建一个新的项目并下载该项目及如何提交新的文件

  10. Java中动态代理技术生成的类与原始类的区别 (good)

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...