HTTP详解

一、HTTP 是什么

HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

它可以拆成三个部分:

  • 超文本
  • 传输
  • 协议

二、http协议的作用

  • HTTP是一个客户端和服务器端请求和应答的标准(TCP)。
  • 客户端是终端用户,服务器端是网站。
  • 通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。
  • 我们称这个客户端叫用户代理(user agent)。
  • 应答的服务器上存储着(一些)资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。
  • 在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

三、http协议的特点

  • 基于请求/响应模型的协议。请求和响应必须成对,先有请求后有响应
  • http协议默认端口:80
  • 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活: HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接: 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

四、http协议的版本

  • HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开

  • HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开

五、HTTP 的报文类型

HTTP 有两类报文:

  • 请求报文:从客户端发送给服务器端的报文。包括请求行、请求头、请求体。
  • 响应报文:服务器到客户的回答。包括响应行、响应头、响应体。
  • 两种报文的结构如下图:
    在这里插入图片描述

六、http请求报文(请求行、请求头、请求主体)

在这里插入图片描述

6.1. 请求行

请求报文的 “请求行” 只有三个内容,即:方法、请求URL、以及HTTP的版本。

在这里插入图片描述

比如:上例中链接到“ 清华大学院系设置” 页面的请求行:GET http://www.tsinghua.edu.cη/chn/yxsz/index.htm HTTP/1.1,此时,该请求报文的请求行就是:GET /chn/yxsz/index. htm HTTP /1. 1 {请求行使用了相对URL}

6.2. 请求头

浏览器通过请求头告诉服务器关于浏览器的一些信息,格式: 请求头名称:请求头值。

HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST),如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。

参数介绍:

  • Accept-Encoding: gzip, deflate,浏览器支持的压缩编码是 gzip 和 deflate。
  • Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7,浏览器支持的字符编码分别是 GB2312、utf-8 和任意字符
  • Accept-Language: zh-cn,zh;q=0.5,浏览器支持的语言分别是中文和简体中文
  • Accept: text/html,application/xhtml+xml,application/xml,application/json,/,表明浏览器所支持接收的数据类型,表明所支持的 MIME 有:html、xhtml+xml、xml、json、任何类型
  • Host: www.tsinghua.edu.cn,此行是请求头的开始,表明发出请求的客户端的域名
  • Connection: close,告诉服务器发送完请求的文档后就可释放连接
  • User-Agent: Mozilla/5.0,表明浏览器的一些版本信息
  • Referer:https://www.baidu.com/ ,浏览器目前所处页面的URL
  • Content-type:application/json,告诉服务器我们发送的请求信息的格式
    Content-type详解

在这里插入图片描述

6.3. 请求主体

请求主体放的是请求的参数,比如:username=aaa。GET 请求没有请求主体,它的请求参数放在请求 URL 中:www.baidu.com?username=aaa。

若方法字段是GET,则此项为空,没有数据。若方法字段是POST,则通常来说此处放置的就是要提交的数据。

七、http 响应报文(响应行、响应头、响应主体)

在这里插入图片描述

7.1. 响应行

响应报文的第一行就是状态行。状态行包括三项内容,即:HTTP的版本、状态码、以及解释状态码的简单短语, 比如:HTTP/1.1 200 OK。

7.1.1. 状态码

状态码就是服务器告诉客户端本次请求和响应的状态。状态码(Status-Code)都是三位数字的, 分为5大类共33种:

  • 1xx:指示信息,表示请求已接收,继续处理
  • 2xx:成功,表示请求已被成功接受,处理。
    200 OK:客户端请求成功
    204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
    206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
  • 3xx:重定向
    301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
    302 Found:临时重定向,表示请求的资源临时搬到了其他位置
    303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
    307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
    304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
  • 4xx:客户端错误
    400 Bad Request:客户端请求有语法错误,服务器无法理解。
    401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    403 Forbidden:服务器收到请求,但是拒绝提供服务
    404 Not Found:请求资源不存在。比如,输入了错误的url
    415 Unsupported media type:不支持的媒体类型
  • 5xx:服务器端错误,服务器未能实现合法的请求。
    500 Internal Server Error:服务器发生不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

7.2. 响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

常见的响应头字段含义:
在这里插入图片描述

7.3. 响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

八、Content-type详解

https://blog.csdn.net/qq_44741577/article/details/136507746?spm=1001.2014.3001.5501

九、HTTP和HTTPS

9.1. HTTP和HTTPS的区别

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  • HTTP 的端口号是 80,HTTPS 的端口号是 443。
  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

9.2. HTTPS 解决的问题

HTTP 由于是明文传输,所以安全上存在以下三个风险:

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

  • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
  • 身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。

HTTPS 是如何解决上面的三个风险的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

9.3. HTTPS建立连接

SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。

前两步也就是 SSL/TLS 的建立过程,也就是 TLS 握手阶段。

SSL/TLS 的「握手阶段」涉及四次通信:

  • ClientHello
    首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。
    在这一步,客户端主要向服务器发送以下信息:
    (1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。
    (2)客户端生产的随机数(Client Random),后面用于生成「会话秘钥」条件之一。
    (3)客户端支持的密码套件列表,如 RSA 加密算法。

  • SeverHello
    服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:
    (1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。
    (2)服务器生产的随机数(Server Random),也是后面用于生产「会话秘钥」条件之一。
    (3)确认的密码套件列表,如 RSA 加密算法。
    (4)服务器的数字证书。

  • 客户端回应
    客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
    如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
    (1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。
    (2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
    (3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。
    服务器和客户端有了这三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

  • 服务器的最后回应
    服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。
    然后,向客户端发送最后的信息:
    (1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。
    至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值