文章目录

  • 一、HTTP是什么?
    • 1. 认识URL
      • 1.1 UrlEncode和UrlDecode
  • 二、HTTP协议
    • 1.基本特征
      • 1.1 无连接
      • 1.2 无状态
      • 1.3 简单快速
    • 2. HTTP构成
      • 2.1 REQUEST/RESPONSE
        • 2.1.1 HTTP请求
        • 2.1.2 HTTP响应
      • 2.2 GET/POST方法的实现
        • 2.2.1 工具
        • 2.2.2 原理
        • 2.2.3 GET方法
        • 2.2.4 POST方法
  • 三. HTTP方法
  • 四. HTTP的状态码
  • 五. HTTP常见header(报头)
  • 六. Cookie
    • 1.Cookie是什么
    • 2.Cookie如何发挥作用
    • 3.Cookie的安全问题
  • 七. HTTP和HTTPS
    • 1. SSL/TLS
    • 2. 加密和解密
      • 2.1 对称密码体制
      • 2.2 非对称加密和对称加密的完美结合
        • 2.2.1 实现过程
        • 2.2.2 非对称加密和对称加密的抉择
    • 3. 来自黑客对认证的威胁
      • 3.1 远端服务器身份认证的解决
      • 3.2 中间信息被篡改问题的解决
  • 总结

一、HTTP是什么?

百度百科:
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。


1. 认识URL

百度百科:
URL是Uniform Resource Locator的缩写,译为"统一资源定位符"。 URL是一种URI,它标识一个互联网 资源 ,并指定对其进行操作或获取该资源的方法。 可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。

具体URI的格式及解释如下:

1.1 UrlEncode和UrlDecode

在URL中,像" / " 、" ? "等字符,已经被URL当作特殊意义理解了,因此这些字符不能随意出现。若某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。

客户端将字符串转义成URL编码的行为叫做UrlEndcode,UrlEncode是一个函数,返回值是字符串。同理,服务器将URL解释成字符串的解码行为叫做UrlDecode,UrlDecode也是一个函数,返回值是已解码的字符串。

举个例子,客户端将“ + ”转换成“ %2B ”交给服务器的行为叫做UrlEncode,而服务器将“ %2B ”解码为“ + ”的行为叫做UrlDecode。


二、HTTP协议

1.基本特征

1.1 无连接

HTTP是基于传输层的TCP协议的,TCP本身虽然是面向连接的,但HTTP建立在TCP之上,并不关心TCP所有的通信细节,也就是不关心底层的一系列行为,HTTP本身的无连接性和TCP本身的连接性是没有关系的。HTTP本身的无连接性体现在一旦TCP建立连接成功,将不再需要HTTP在应用层建立连接。

简单的说,也就是TCP建立连接和HTTP无关,一旦连接建立好,HTTP直接向对方发送request即可。

1.2 无状态

HTTP本身是无状态,并不会记录任何用户信息,只进行基本的请求(request)和响应(response),记录用户的基本信息的技术是Cookie + Session。

1.3 简单快速

HTTP1.0刚出现时,是基于短连接进行文本(html、img、css、js…)传输。所谓的短连接即客户端发送请求,则服务器对请求进行处理,然后给客户端响应,最后服务器将连接关闭,即一来一回的过程。

HTTP1.1/HTTP2.0是基于长连接进行数据传输。

总的来说,
简单体现在:基于最基本的连接一来一回处理请求,返回响应。
快速体现在:底层使用TCP协议来进行数据的一个发送,可发送多种多媒体资源。


2. HTTP构成

2.1 REQUEST/RESPONSE

前言:

任何一层协议,都应该解决两个问题:
1.报头和有效载荷进行分离的问题
2.将自己的有效载荷交付给上层的问题

在讨论request和response之前,我们先来思考这样一个问题:request和response是数据吗?答案是肯定的。这两个数据的交互,在底层采用的是TCP协议。当request传输到服务器,服务器将对该request进行解析,需要数据解析的前提条件则是要把数据完整的、可靠的发送给服务器。


2.1.1 HTTP请求

1.请求行:通常包含三部分,分别为:请求方法(GET/POST)、URL(在此处为所要访问的资源存储的路径)、Version版本号,如HTTP1.0/HTTP1.1,末尾要用\r\n结束,表示换行。

2.请求报头:保存了大量用冒号分隔的key:value。存在Content_Length字段,表示空行之后多少个字节是正文部分。

3.空行:将报头和有效载荷进行分离。

4.请求正文:当使用GET方法时,可以不用正文。当使用POST时,需要携带正文,此处正文为上传的数据

理解:包含空行在内的所有请求报文都是以行为基本单位的,request中的请求正文可视为有效载荷,其余三部分(请求行、请求报头、空行)则视为协议报头。作为读取端,服务器当读取到空行时则认为请求报头已读取完。一个HTTP可能会有多个请求,如果不慎服务器将会读取错误的请求正文,所以服务器又是如何知道应该读取多少长度的请求正文呢?此时就需要请求报文中的Content_Length字段,如Content_Length:128,则代表空行后128字节处是我的正文部分。


2.1.2 HTTP响应

1.响应行:包括三部分,分别为:Version版本号,如HTTP1.0/HTTP1.1;状态码,如404、200等;状态码描述,如404Not Found、200OK等。末尾要用\r\n结束,表示换行。

2.响应报头:保存了大量用冒号分隔的key:value。存在Content_Length字段,表示空行之后多少个字节是正文部分。

3.空行:将报头和有效载荷进行分离。

4.响应报文:若不存在,则服务器将进行close关闭响应。若存在正文,大部分应为html/imag/css/js/…数据形式,将向客服端返回响应。


2.2 GET/POST方法的实现

2.2.1 工具

Fiddler

2.2.2 原理

当客户端通过浏览器向服务器发送请求时,客户端的请求通过网络传输到服务器,服务器直接返回响应。倘若此时存在一个Web代理服务器,那么无论是客户端发送的请求还是服务器返回的响应都将先经过此服务器,自然能够进行抓包工作。

2.2.3 GET方法

比如我们打开微软主页,发现Fiddler的Raw部分显示如下:

2.2.4 POST方法

常见于登录界面,如我们登录自己的163邮箱,但是密码错误,此处我们要向服务器上传数据,上传的数据我们大部分是使用网页中的表单上传的,当有了表单时,我们便可以用GET方法或者POST方法进行提交,不过POST方法传输数据时,是将有效数据放在正文部分传输的,并不会在URL中传参。


5.总结:GET方法通过URL传参,POST方法通过正文传参,相比之下似乎POST方法更安全,但实际上POST方法也并不安全,POST方法传参并不会回应在浏览器的URL中,不会把数据直接显示,只能说是更加私密,除非加密,否则并不安全。其次,URL传参的长度有上限,正文部分理论上并没有长度限制。


三. HTTP方法

方法 说明 支持的HTTP协议版本
GET 获取资源 1.0/1.1
POST 传输实体主体 1.0/1.1
PUT 传输文件 1.0/1.1
HEAD 获得报文首部 1.0/1.1
DELETE 删除文件 1.0/1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的联系 1.0
UNLINK 断开连接关系 1.0

四. HTTP的状态码

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

下面列举一些最常见的状态码,如:200(OK),404(Not Found),403(Forbidden),302(Redirect),504(Bad GateWay)


五. HTTP常见header(报头)

Content-Type:数据类型(text/heml等)
Content-Length:Body的长度
Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
User-Agent:声明用户的操作系统和浏览器版本信息
Referer:当前页面是从哪个页面跳转过来的
Location:搭配3XX状态码使用,告诉客户端接下来要去访问哪里(重定向)
Cookie:用于在客户端存储少量信息,通常用于实现会话(Session)的功能

关于User-Agent,值得一提的是,可以用此标志来判断HTTP请求是用户发出的或是爬虫客户端发出的,因为用户获取网页时是用浏览器获取的,只要HTTP请求中携带了User-Agent就证明为用户请求,反之则为爬虫。用套接字connect直接连接对应的服务器,构建request发送给服务器,服务器会自动把response响应回来,这个动作就叫做爬虫。获取网页用浏览器获取就叫做网页请求,用自己写的程序获取就叫做爬虫,但只要是爬虫,就会留下痕迹,因为它具有很强的规律性。


六. Cookie

前言:需要我们登录之后访问的资源有很多,比如说社区内有很多博客,我们现在要看第一篇,这时需要我们登录,当我们登录并阅读完第一篇博客后,我们想立刻看第二篇博客,此时我们不需要再次登录。但理论上我们的信息只在看第一篇博客时被认证过,为何看第二篇博客的时候不需要再次认证呢?当然,这和有状态和无状态是有关系的。我们知道,HTTP本身是无状态的,但是HTTP是给用户使用的,如果是无状态,会给用户带来很差的体体验,此时Cookie技术发挥了作用。


1.Cookie是什么

百度百科:Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。


2.Cookie如何发挥作用

浏览器可以看做是一个HTTP客户端,第一次发送请求进行认证的时候我们输入了账号和密码,此时服务器便得到账号和密码,服务器需要给客户端一个响应。一旦给响应,Server端便在自己的响应端带上set-cookie字段,把set-cookie:name和set-cookie:passwd再写回去,此时账号信息在浏览器内自动以Cookie形式保存了。自此,在特定的时间段内,浏览器再发送请求时,会自动在自己HTTP的请求中包含字段叫做Cookie,Cookie中就包含了账号信息。服务端收到Cookie,会自动对其进行认证。本质上,Cookie是浏览器中的一个文件,浏览器保存的内容是用文件保存的。文件也分为内存级的和硬盘级的。


3.Cookie的安全问题

前言:一旦浏览器的Cookie被黑客窃取走,用户的账号密码、浏览记录也都将被黑客一览无余,黑客便可以冒充我们。那么有没有解决方案呢?Cookie+Session可以很好的解决这个问题。


Cookie+Session的做法是,在首次客户端发出请求并通过认证后,服务器将为其分配一个全服务器唯一的一个序列号sid,并将sid及客户端的登录情况统一存储在session文件中,并将该sid带上set-cookie字段响应回去,在客户端,将sid保存在cookie文件中。自此每次再需要访问服务器,cookie中只需要包含sid就可以了,sid会自动被服务器认证,并找到其session文件,获得用户的状态。

与原始做法单单把敏感信息保存在本地相比,Cookie+Session将敏感信息保存在服务器端,Cookie中只需要保存sid就可以,服务器端安全级别比本地要高很多,但这并不意味着我们的Cookie文件就彻底安全了。只是如果又有黑客窃取到了我们的Cookie文件,他只能获取其中保存的sid,并不能获得任何直接有效的信息。


七. HTTP和HTTPS

我们知道

1. SSL/TLS

SSL((Secure Sockets Layer 安全套接字协议))和TLS(Transport Layer Security传输层安全性协议)在HTTPS的框架下位于应用层和传输层之间,SSL协议是TLS协议的前身,都用于对网络连接进行加密和解密。我查阅了许多资料但发现还是难以界定它们究竟属于哪一层协议,可以总结为:SSL/TLS是一个介于HTTP协议与TCP之间的一个可选层,它们在技术上位于应用层,但从开发者的角度看,它们是一个提供TCP服务的运输层协议。


2. 加密和解密

2.1 对称密码体制

对称加密算法:密钥进行加密和解密。

如图所示,客户端发出请求,经过加密把HTTPS请求发送给服务器,经过服务器的解密模块将请求解密再传到服务器,此时我们发送的请求好像是安全的,但是会有这样一个关于起源的问题:无论是客户端进行加密还是服务器进行解密,在对称加密算法中,都需要密钥。密钥也是一个数据,客户端想要向服务器传输数据,又想要保证数据的安全,就要首先把密钥传输给服务器,那么谁来保证密钥这个数据的传输安全呢?


2.2 非对称加密和对称加密的完美结合

2.2.1 实现过程

非对称加密算法:一般来说,公钥进行加密,私钥进行解密。

当我刚刚接触到这个实现过程时,我应该是立刻断定,这一定是有天赋的人所能想到的非常巧妙的方法。


为了保证我们所发送的密钥这一数据的安全性,我们需要对其进行加密。我们把非对称加密和对称加密结合的过程叫做HTTPS协商过程,具体实现如下:在服务器端是存储了各种加密算法的,我们的客户端首先向服务器发送一个请求,希望获得其中一个非对称加密算法的公钥,当然,服务器端存储了这个非对称加密算法的私钥。第二步,客户端利用服务器响应的公钥对自己的对称加密算法的密钥进行加密,再将其以请求的方式发送给服务器,服务器利用非对称加密算法的私钥进行解密,这样一来便得到了客户端对称加密算法的密钥。自此,客户端和服务器就可以利用对称加密进行加密和通信了。


2.2.2 非对称加密和对称加密的抉择

有的人会发现,直接利用非对称加密就已经可以保证安全的请求与响应了,但是由于非对称加密效率比较低,对称加密快,所以两者结合是最优的选择。


3. 来自黑客对认证的威胁

前言:存在这样一种情况,若在客户端和服务器之间存在黑客的中间服务器,并且在第一次服务器将公钥响应给客户端时,黑客用自己的公钥把服务器要响应给客户端的公钥进行了替换,那么客户端是不知道接收的公钥是存在问题的。当客户端用被黑客替换的公钥对自己的密钥进行加密并传输给服务器时,加密内容通过黑客的服务器,由于加密内容是用黑客密钥进行加密的,而黑客又显然具有相应的私钥,于是黑客便可以获得客户端实际的密钥。为了不让客户端和服务器察觉,黑客用第一次就已经劫持的服务器响应给客户端的公钥向服务器发出请求。要想防止这种情况,需要对远端服务器进行身份认证

通过前言的介绍,有两个问题亟待我们解决,它们分别是:远端服务器的认证问题中间信息被篡改问题


3.1 远端服务器身份认证的解决

为了认证服务器的身份,信息安全部门的公正处会给服务器颁发CA证书,CA证书中包含了服务器的公钥和一些权威信息,同时公正部门也有自己的CA公钥和CA私钥。

客户端本身有内置的证书信息,当客户端向服务器发起请求时,会拿到服务器的CA证书,并可以随时对其发起认证。此处的认证即用客户端的内置证书信息和CA证书的信息进行比较。

我们知道,在非对称密码体制中,往往公钥是用来加密、私钥是用来解密的,但有时也可以用私钥来进行加密、公钥进行解密。服务器的CA证书中的权威信息可以看作摘要,用公正处的CA私钥对其进行加密,最终权威信息以指纹的方式呈现,这些将传输给客户端。而客户端的内置信息中包含了公正处的CA公钥,可以使用CA公钥对指纹进行解密,解密后便得到了权威信息的摘要,再将摘要与内置证书信息进行对比。中间服务器也可以拿到服务器的CA证书,但是它没有公正处的CA公钥,无法对其进行解密,也就是无法拿到摘要的原始信息。

简单总结一下,可以说为:公钥加密,私钥解密;私钥加密,公钥认证。


3.2 中间信息被篡改问题的解决

数据经过某些加密算法,如Hash算法加密后,会形成具有映射关系的数据摘要。此时只要数据稍作改动,就会得到另外一个具有映射关系的数据摘要,但这两个数据摘要是不相等的。当一端接收到数据时,接受到的除了数据本身还有一段数据摘要,此时只需要把数据本身经过同样的加密算法加密便可以得到数据摘要,用所得的数据摘要和接受到的数据摘要进行对比,如果相同则证明没有篡改过,反之。


总结

因为是第一次写博客,所以想纪念一下,临近总结的时候发现已经写了接近九千五百字。其实吧,不必多说,博客的内容及用语有很多地方都是不准确的,甚至是错误的,我尽力让它全面并准确。第一次写博客,我希望所有抱着和我同样心情的不安的在计算机这条道路上的前进的人们能够不只是踩着前辈的脚印迷茫地走下去,希望你和我能够在某个时刻留下自己的想法。如果有的话,我希望阅读这篇博客的人可以找到其中的错误并提醒我去纠正它。最后你问我想说些什么?有天赋的人改变世界,没有天赋的人可以改造世界。

如果可以,我能为你做些什么?

应用层的HTTP和HTTPS协议相关推荐

  1. 网络编程知识预备(4) ——了解应用层的HTTP协议与HTTPS协议

    参考:简单了解HTTP协议与HTTPS协议 作者:丶PURSUING 发布时间: 2021-03-15 10:55:13 网址:https://blog.csdn.net/weixin_4474282 ...

  2. 应用层协议:HTTP与HTTPS协议详解、二者的区别

    http协议详解 1.HTTP协议:超文本传输协议 是一种分布式.合作式.多媒体信息系统服务,面向应用层的协议.是一种通用的,不分状态的协议.是一种请求/应答协议. 1.1.HTTP/1.0和HTTP ...

  3. 计算机网络(七) | 应用层:HTTPS协议

    目录 HTTPS协议 加密的介绍 HTTPS的工作过程 对称加密 非对称加密 HTTPS协议 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按 ...

  4. 应用层: HTTP 与 HTTPS协议

    目录 http请求格式: 首行: method: 请求方法. URL: 统一资源定位符, 俗称网址. version: http协议版本号 头部: 空行: 正文: http响应格式: 首行: 头部: ...

  5. HTTP和HTTPS协议的区别

    什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息 ...

  6. 大型网站的 HTTPS 实践(1):HTTPS 协议和原理

    转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重 ...

  7. https协议及与http协议的比较

    一.HTTP和HTTPS的基本概念 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器 ...

  8. HTTP协议和HTTPS协议初探

    概况 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. HTTP是 ...

  9. HTTPS协议原理分析

    HTTPS协议原理分析 HTTPS协议需要解决的问题 HTTPS作为安全协议而诞生,那么就不得不面对以下两大安全问题: 身份验证 确保通信双方身份的真实性.直白一些,A希望与B通信,A如何确认B的身份 ...

最新文章

  1. 干掉Spring Cloud,这个框架是微服务的未来!
  2. mxnet制作人脸识别训练集
  3. 经典面试题-Linux Kernel面试题
  4. 提高PHP性能的53个技巧
  5. hibernate注解的测试
  6. 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
  7. Hearing Range
  8. 产品经理的书籍笔记(一)--------《神一样的产品经理》
  9. 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
  10. OSChina 娱乐弹弹弹——程序猿如何防火防盗防单身 OR 防败家?
  11. 数控技术转行java_我29岁想转行数控却找不到工作
  12. PHP登入网站抓取并且抓取数据
  13. VBA--遍历所有工作表,获取所有行和列,复制粘贴为数值
  14. 阿里云Redis开发规范学习总结
  15. 小米再次回购股票:斥资近1亿港元 传递市场信心
  16. ambari全攻略流程,开发ambari(四)
  17. 浙江大学计算机科学与技术学院2014届本科生毕业典礼活动,北京邮电大学2014届本科生毕业典礼隆重举行...
  18. 光固化3D打印机切片参数分析
  19. java图文验证码登录验证
  20. 证件照制作教程:如何使用在线工具制作高质量的证件照

热门文章

  1. 7-2 求一元二次方程的根
  2. 2015年3季度基金持股超流通股30%的个股一览
  3. HTTP的get和post请求方法以及HTTP接口
  4. 新浪微博客户端开发之OAuth认证篇
  5. 信息学奥赛一本通(C++版) 网站补充题目
  6. 隐马尔科夫模型(HMM)理解与总结
  7. Python期末总结
  8. 如何让HTML页面支持部分内容打印
  9. 数据仓库-你不知道的HSQL?
  10. laradock 安装swoole