HTTP

11次阅读

共计 3005 个字符,预计需要花费 8 分钟才能阅读完成。

一. 简述浏览器输入 URL 地址后发生的事情
1.1 描述
浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。
NS 服务器返回网站的 IP 地址。
浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。
浏览器获取请求页面的 HTML 代码。
浏览器在显示窗口内渲染 HTML。
窗口关闭时,浏览器终止与服务器的连接。

  1. 请介绍常见的 HTTP 状态码(至少五个)

状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息–表示请求已接收,继续处理。

100 客户必须继续发出请求
101 客户要求服务器根据请求转换 HTTP 协议版本
2xx:成功–表示请求已被成功接收、理解、接受。

200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201(已创建)请求成功并且服务器创建了新的资源。
202(已接受)服务器已接受请求,但尚未处理。
3xx:重定向–要完成请求必须进行更进一步的操作。

300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx:客户端错误–请求有语法错误或请求无法实现。

400(错误请求)服务器不理解请求的语法。
401(未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403(禁止)服务器拒绝请求。
5xx:服务器端错误–服务器未能实现合法的请求。

500(服务器内部错误)服务器遇到错误,无法完成请求。
501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。

  1. 请介绍常见的 HTTP 头部(至少五个)

3.1 HTTP 头部
更多完整内容,可以查看《HTTP 响应头和请求头信息对照表》

首部字段名 说明
Accept 告诉服务器,客户端支持的数据类型。
Accept-Charset 告诉服务器,客户端采用的编码。
Accept-Encoding 告诉服务器,客户机支持的数据压缩格式。
Accept-Language 告诉服务器,客户机的语言环境。
Host 客户机通过这个头告诉服务器,想访问的主机名。
If-Modified-Since 客户机通过这个头告诉服务器,资源的缓存时间。
Referer 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
User-Agent 客户机通过这个头告诉服务器,客户机的软件环境。
Cookie 客户机通过这个头告诉服务器,可以向服务器带数据。
Connection 客户机通过这个头告诉服务器,请求完后是关闭还是保持链接。
Date 客户机通过这个头告诉服务器,客户机当前请求时间

3.2 Request Header
举例:
Request Header 描述
GET /sample.Jsp HTTP/1.1 请求行
Host: www.uuid.online/ 请求的目标域名和端口号
Origin: http://localhost:8081/ 请求的来源域名和端口号(跨域请求时,浏览器会自动带上这个头信息)
Referer: https:/localhost:8081/link?query=xxxxx 请求资源的完整 URI
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 浏览器信息
Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0 当前域名下的 Cookie
Accept: text/html,image/apng 代表客户端希望接受的数据类型是 html 或者是 png 图片类型
Accept-Encoding: gzip, deflate 代表客户端能支持 gzip 和 deflate 格式的压缩
Accept-Language: zh-CN,zh;q=0.9 代表客户端可以支持语言 zh-CN 或者 zh (值得一提的是 q(0~1) 是优先级权重的意思,不写默认为 1,这里 zh-CN 是 1,zh 是 0.9)
Connection: keep-alive 告诉服务器,客户端需要的 tcp 连接是一个长连接

  1. 请列举常用的 HTTP 方法,并介绍 GET 与 POST 请求之间的区别

4.1 HTTP Request Method
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD 方法。
HTTP/1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 实体中包含一个表,表中说明与该 URI 所表示的原内容的区别。
10 MOVE 请求服务器将指定的页面移至另一个网络地址。
11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。
12 LINK 请求服务器建立链接关系。
13 UNLINK 断开链接关系。
14 WRAPPED 允许客户端发送经过封装的请求。
15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。
4.2 GET 与 POST 请求之间的区别
区别内容 GET POST
点击返回 / 刷新按钮 没有影响 数据会重新发送(浏览器将会提示“数据被重新提交”)
添加书签 可以 不可以
缓存 可以 不可以
编码类型(Encoding type)application/x-www-form-rulencoded application/x-www-form-rulencoded or multipart/form-data 请为二进制数据使用 multipart 编码
历史记录 有 没有
长度限制 有 没有
数据类型限制 只允许 ASCLll 字符类型 没有限制,允许二进制数据
安全性 查询字符串会显示在地址栏的 URL 上,不安全,请不要使用 GET 请求提交敏感数据 因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以 POST 请求比 GET 请求安全,但也不是最安全的方式,如需要传送敏感数据,请使用数据加密。
可见性 查询字符串在地址栏的 URL 中可见 查询字符串在地址栏的 URL 中不可见

正文完
 0

http

11次阅读

共计 3351 个字符,预计需要花费 9 分钟才能阅读完成。

简介

在 1990 年,HTTP 就成为 WWW 的支撑协议。当时由其创始人 WWW 之父蒂姆·贝纳斯·李(TimBemers—Lee)提出,随后 WWW 联盟(WWW Consortium)成立,组织了 IETE(Internet Engineering Task Force)小组进一步完善和发布 HTTP 协议。

HTTP 是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP 是一种协议规范,这种规范记录在文档上,为真正通过 HTTP 协议进行通信的 HTTP 的实现程序。

协议

HTTP 是一个简单的请求 - 响应协议,它通常运行在 TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 码形式给出;而消息内容则具有一个类似 MIME 的格式。这个简单模型是早期 Web 成功的有功之臣,因为它使得开发和部署是那么的直截了当。

那大概我们看到网页的过程是怎样的呢:实际上我们输入 URL 后,我们的浏览器给 Web 服务器发送了一个 Request,
Web 服务器接到 Request 后进行处理,生成相应的 Response,然后发送给浏览器,
浏览器解析 Response 中的 HTML, 这样我们就看到了网页

典型的 HTTP 事务处理过程

  1. 客户与服务器建立连接;
  2. 客户向服务器提出请求;
  3. 服务器接受请求,并根据请求返回相应的文件作为应答;
  4. 客户与服务器关闭连接。

HTTP 请求报文

一个请求报文有以下四个部分组成:请求行(request line)消息头部(header)空行 请求正文 

  1. 请求行由 请求方法URLHTTP 版本协议组成,它们三个之间使用空格分割,请看下面的例子

       POST http://www.example.com HTTP/1.1

    这个例子就包含了我们所说的请求行的组成部分,POST为方法,http://www.example.com为 url,HTTP/1.1为版本协议

    请求方法

    方法 描述
    GET 请求指定的页面信息,并返回实体主体。
    HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST 向指定资源提交数据进行处理请求。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。
    PUT 从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE 请求服务器删除指定的页面。
    CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS 允许客户端查看服务器的性能。
    TRACE 回显服务器收到的请求,主要用于测试或诊断。
    PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新。

    以上就是我们可以用到的请求方法,常见的只有那么几个,也许可能自己没有达到那个层面,我们可以仔细看上面的这些方法,每个方法都有自己独立要干的事情,所以在我们要和后端开发定制接口或是规范的时候我们要准确的定制,虽然你是前端(在前后端分离的时代你是主动你离用户更近)。

  2. URL

    URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 请看下面格式

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment
    格式 说明
    hostname 主机名或 IP 地址。
    port HTTP 服务器的默认端口是 8080,http://192.168.10.93:8080/
    path 由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
    parameters 这是用于指定特殊参数的可选项。
    query 可选,用于给动态网页(如使用 CGI、ISAPI、PHP/JSP/ASP/ASP。NET 等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。
    fragment 字符串,用于指定网络资源中的片断。

    上面就是我们所说的 url 它拥有以上甚至更多的格式字段提供我们在 url 传输获取等资源。

  3. 消息头部

    HTTP 请求头提供了关于请求,响应或者其他的发送实体的信息。

       User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个 IP 地址,即虚拟主机。

    上面的三个是我们在开发中常用经典的头部信息,更多的头部信息


    我们可以仔细看上面的请求响应图一共分为以下几个

    • 通用首部(General Header)
    • 请求首部(Request Header)
    • 响应首部(Response Header)
    • 实体首部(Entity Header Fields)

当然我们这个图片内实体是没有的因为我这个图是 get 方式,大家可以看 POST 等方法看一下返回的数据就是这个了。
剩下的空行我就在这不多说了。

HTTP 响应报文

响应报文有以下四个部分组成:(状态行)响应行 响应头 空行 响应体 

HTTP/1.1 200 OK
Date: July, 22 May 20019 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>


通过上面的代码示例以及上面的图我们对响应报文应该有了一个初步的了解,它的组合也是分为四部分组成。

  1. 响应行

    http 协议 状态码 状态码的文本描述 组成,他们之间使用空格隔开。

    状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

    状态码 说明
    1xx 表示服务器已接收了客户端请求,客户端可继续发送请求。
    2xx 表示服务器已成功接收到请求并进行处理。
    3xx 表示服务器要求客户端重定向。
    4xx 表示客户端的请求有非法内容。
    5xx 表示服务器未能正常处理客户端的请求而出现意外错误。

    状态码的文本描述:

    状态码描述 说明
    200 OK 表示客户端请求成功。
    400 Bad Request 表示客户端请求有语法错误,不能被服务器所理解。
    401 Unauthonzed 表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用。
    403 Forbidden 表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因。
    404 Not Found 请求的资源不存在。
    500 Internal Server Error 表示服务器发生不可预期的错误,导致无法完成客户端的请求。
    503 Service Unavailable 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

    以上仅为一些示例和比较常见的状态码,请大家参考,更多可以去 google 一下。

  2. 响应头部

    响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI 进一步的信息。
    响应头 | 说明

    Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求。
    Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负)。
    Allow 对某网络资源的有效的请求行为,不允许则返回 405。
    Cache-Control 告诉所有的缓存机制是否可以缓存及哪种类型。
    Content-Encoding web 服务器支持的返回内容压缩编码类型。
    Content-Language 响应体的语言。
    Content-Length 响应体的长度。
    Content-Location 请求资源可替代的备用的另一地址。
    Content-MD5 返回资源的 MD5 校验值。
    Content-Range 在整个返回体中本部分的字节位置。
    Date 原始服务器消息发出的时间。
    ETag 请求变量的实体标签的当前值。
    Expires 响应过期的日期和时间。
    Pragma 包括实现特定的指令,它可应用到响应链上的任何接收方。
    Proxy-Authenticate 它指出认证方案和可应用到代理的该 URL 上的参数。

    响应头的信息有很多,更多的需要的大家可以去搜一搜看一下,但是一般都是我们不常见的,建议知道是干什么的就行,根据自己的能力干多大的事。

  3. 响应体

    响应的资源(HTML、图片、声音等)会被放入这个响应实体中。

参考学习

理解 RESTful 架构
HTTP 协议-HTTP 响应报文
HTTP 响应
HTTP 响应头信息和请求头信息详解

正文完
 0

HTTP

11次阅读

共计 6371 个字符,预计需要花费 16 分钟才能阅读完成。

网络七层协议

物理层

为数据端设备 提供传输数据的通路、传输介质,如光纤、无线信道、终端等

数据链路层

为网络层提供数据传送服务的,可以粗略地理解为 数据通道 (物理层是长期的,而数据链路层是 生存期内 的)

1. 链路连接的建立,拆除,分离
2. 链路层的数据传输单元是帧

网络层

当终端增多时,解决任意终端连接问题。称 路由或者叫寻径

1. 激活, 终止网络连接
2. 在一条数据链路上复用多条网络连接, 多采取 ` 分时复用 ` 技术
3. 排序, 流量控制

传输层

它是源 端到目的端 对数据传送进行控制从低到高的最后一层

1. 传输层也称为运输层. 传输层只存在于端开放系统中
2. 传输层是两台计算机经过网络进行数据通信时, 第一个端到端的层次,具有缓冲作用
3. 传输层面对的数据对象已不是网络地址和主机地址, 而是和会话层的界面端口
4. 采用分流 / 合流,复用 / 解复用技术来调节通信子网 (如电话交换网, 分组交换网, 公用数据交换网, 局域网等) 的差异

上述功能的最终目的是为会话层提供可靠的, 无误的数据传输

会话层

使应用建立和维持会话,并能使会话获得同步

主要功能流程
1. 将会话地址映射为运输地址
2. 选择需要的运输服务质量参数(QOS)
3. 对会话参数进行协商
4. 识别各个会话连接
5. 传送有限的透明用户数据

6. 传输数据,释放连接

表示层

异种机通信提供一种公共语言,以便能进行互操作,前面几层 完成了数据传输 ,之后要 实现数据的使用

应用层

应用层向应用程序提供服务

DNS

浏览器输入 url 后发生的事情://
浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。DNS 服务器返回网站的 IP 地址。浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。浏览器获取请求页面的 HTML 代码。浏览器在显示窗口内渲染 HTML。窗口关闭时,浏览器终止与服务器的连接。

状态码

1XX:指示信息–表示请求已接收,继续处理
2XX:成功–表示请求已被成功接收、理解、接受。3XX:重定向–要完成请求必须进行更进一步的操作。4XX:客户端错误–请求有语法错误或请求无法实现。5XX:服务端错误 - 服务器未能实现合法的请求

request header 和 response header 中参数定义

request header

GET /sample.Jsp HTTP/1.1    请求行
Host: www.uuid.online/    请求的目标域名和端口号
Origin: http://localhost:8081/    请求的来源域名和端口号(跨域请求时,浏览器会自动带上这个头信息)Referer: https:/localhost:8081/link?query=xxxxx    请求资源的完整 URI
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36    浏览器信息
Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0    当前域名下的 Cookie
Accept: text/html,image/apng    代表客户端希望接受的数据类型是 html 或者是 png 图片类型
Accept-Encoding: gzip, deflate    代表客户端能支持 gzip 和 deflate 格式的压缩
Accept-Language: zh-CN,zh;q=0.9    代表客户端可以支持语言 zh-CN 或者 zh (值得一提的是 q(0~1)是优先级权重的意思,不写默认为 1,这里 zh-CN 是 1,zh 是 0.9)
Connection: keep-alive    告诉服务器,客户端需要的 tcp 连接是一个长连接

response header

|HTTP/1.1 200 OK| 响应状态行 |
|Date: Mon, 30 Jul 2018 02:50:55 GMT| 服务端发送资源时的服务器时间 |
|Expires: Wed, 31 Dec 1969 23:59:59 GMT| 较过时的一种验证缓存的方式,与浏览器(客户端)的时间比较,超过这个时间就不用缓存(不和服务器进行验证),适合版本比较稳定的网页 |
|Cache-Control: no-cache| 现在最多使用的控制缓存的方式,会和服务器进行缓存验 | 证,具体见博文“Cache-Control”|etag: "fb8ba2f80b1d324bb997cbe188f28187-ssl-df"| 一般是 Nginx 静态服务器发来的静态文件签名,浏览在没有“Disabled cache”情况下,接收到 etag 后,同一个 url 第二次请求就会自动带上“If-None-Match”|
|Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT| 服务器发来的当前资源最后一次修改的时间,下次请求时,如果服务器上当前资源的修改时间大于这个时间,就返回新的资源内容 |
|Content-Type: text/html; charset=utf-8| 如果返回是流式的数据,我们就必须告诉浏览器这个头,不然浏览器会下载这个页面,同时告诉浏览器是 utf8 编码,否则可能出现乱码 |
|Content-Encoding: gzip| 告诉客户端,应该采用 gzip 对资源进行解码 |
|Connection: keep-alive| 告诉客户端服务器的 tcp 连接也是一个长连接 |

Http 请求方法

1    GET    请求指定的页面信息,并返回实体主体。2    HEAD    类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头
3    POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。4    PUT    从客户端向服务器传送的数据取代指定的文档的内容。5    DELETE    请求服务器删除指定的页面。6    CONNECT    HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。7    OPTIONS    允许客户端查看服务器的性能。8    TRACE    回显服务器收到的请求,主要用于测试或诊断。9    PATCH    实体中包含一个表,表中说明与该 URI 所表示的原内容的区别。10    MOVE    请求服务器将指定的页面移至另一个网络地址。11    COPY    请求服务器将指定的页面拷贝至另一个网络地址。12    LINK    请求服务器建立链接关系。13    UNLINK    断开链接关系。14    WRAPPED    允许客户端发送经过封装的请求。15    Extension-mothed    在不改动协议的前提下,可增加另外的方法。

get 和 post 的区别

                               get                                 post
                               
点击返回 / 刷新按钮              没有影响                         会重新发送数据包
                                                      (浏览器会重新提示 "数据被重新提交")
                                                      
添加书签                       可以                                不可以

缓存                           可以                                不可以

编码类型        application/x-www-form-rulencoded    application/x-www-form-rulencoded 
                                                            or multipart/form-data
                                                      请为二进制数据使用 multipart 编码
                                                      
历史记录                        有                                  没有

长度限制                        有                                  没有

数据类型限制               只允许 ascii 类型                  没有限制,允许二进制数据

安全性                 查询字符串会直接在 url 显示           数据没有缓存或保持在历史记录中
                                                           但传输敏感数据,还需加密

cookie 和 session

三分钟搞定

因为 Http 协议无状态,在需要识别状态的时候,需要借助外力来辨别,而这个外力就是 Cookie 与 Session

Cookie
存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过 HTTP 协议,将他们本地的 Cookie 内容也发到咱们服务器上,从而完成验证
Cookie 是存储在浏览器客户的一小片数据;Cookie 可以同时被前台与后台操作;Cookie 可以跨页面存取;Cookie 是不可以跨服务器访问的;Cookie 有限制;每个浏览器存储的个数不能超过 300 个,每个服务器不能超过 20 个,数据量不能超过 4K;Cookie 是有生命周期的,默认与浏览器相同,如果进程退出,cookie 会被销毁

session
当用户访问我们的网站时,我们的服务器会成一个 Session ID,然后把 Session ID 存储起来,再把这个 Session ID 发给我们的用户,用户再次访问我们的服务器的时候,拿着这个 Session ID 就 能验证了,当这个 ID 能与我们服务器上存储的 ID 对应起来时,我们就可以认为是自己人
seesion 数据存储在服务器端;每一个会话分配一个单独的 session_id;
该 session_id 通过 cookie 传送到前台,默认的 session_id 名称是 PHPSESSIONID;
前台只能看到 Session 的 ID,而不能修改 Session 值;
使用 Session 之前需要先开启会话;
Session 存储在 Session 数组 $_SESSION ;
Session 存储方式比较安全,但是如果 Session 数量过多,会导致服务器性能下降;

请求报文与响应报文的格式

请求报文

请求报文由 请求行、请求头部、请求正文 组成

1. 请求行
格式:请求方法 + 空格 + URL + 空格 + 协议版本 + 回车符 + 换行符
例如:GET www.baidu.com HTTP/1.1

2. 请求头部 - 请求头部为请求报文添加了一些附加信息,由 "key:value" 值对组成
格式:头部字段名 + 冒号(:)+ 值 + 回车符 + 换行符
例如:Host:接受请求的服务器地址,可以是 IP: 端口号,也可以是域名
    User-Agent:发送请求的应用程序名称
    Connection:指定与连接相关的属性,如 Connection:Keep-Alive
    Accept-Charset:通知服务端可以发送的编码格式
    Accept-Encoding:通知服务端可以发送的数据压缩格式
    Accept-Language:通知服务端可以发送的语言
    
3. 请求正文 - 一般用于 post 请求中
描述:POST 方法适用于需要客户填写表单的场合
与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length

响应报文

响应报文由 状态行、响应头部、响应正文 组成

1. 状态行
格式:协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车符 + 换行符
2. 响应头部 - 与请求头部格式一致,由 "key:value" 值对组成
格式:头部字段名 + 冒号(:)+ 值 + 回车符 + 换行符
例如:Server:服务器应用程序软件的名称和版本
    Content-Type:响应正文的类型(是图片还是二进制字符串)Content-Length:响应正文长度
    Content-Charset:响应正文使用的编码
    Content-Encoding:响应正文使用的数据压缩格式
    Content-Language:响应正文使用的语言
3. 响应正文
响应正文就是 html 代码了

HTTPS

https 概况

TTPS = HTTP+TLS/SSL
通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性

1. 对称加密 - 同一密钥实现加解密
2. 非对称加密 - 需要一对公钥 and 私钥(公钥对数据进行加密,只有用对应的私钥才能解密)
3. 散列函数(Hash)- 任意长度的输入通过散列算法变换成固定长度的输出(不同的输入可能会散列成相同的输出)
对于 Hash 中不同输入散列成相同的输出,叫碰撞。即 key1≠key2,f(key1)=f(key2),key1 和 key2 称同义词
典型的散列函数有无线的定义域,有限的值域

Hash 算法应用于信息安全
1. 文件校验
MD5 Hash 算法的 "数字指纹" 特性,使它成为应用最广泛的一种文件完整性校验和 (Checksum) 算法
不少 Unix 系统有提供计算 md5 checksum 的命令
2. 数字签名
由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称 "数字摘要" 进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。3. 鉴权协议
在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法

https 工作原理

其在 http 上加了一层处理加密信息的模块,所以传输的数据都是 加密后的数据

1. 客户端发起 HTTPS 请求
浏览器里面输入一个 HTTPS 网址,然后连接到服务端的 443 端口上。注意这个过程中客户端会发送一个密文族给服务端,密文族是 浏览器所支持的加密算法 的清单。

2. 服务端配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套 证书其实就是一对公钥和私钥,可以这么理解,公钥就是一把锁头,私钥就是这把锁的钥匙,锁头可以给别人对某个东西进行加锁,但是加锁完毕之后,只有持有这把锁的钥匙才可以解锁看到加锁的内容。

3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。

4. 客户端解析证书
这部分工作是由客户端的 TLS 来完成的,首先会 验证公钥是否有效 ,如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就 生成一个随机值,然后用证书 (公钥) 对该随机值进行加密

注意一下上面提到的 ” 发现异常 ”。证书中会包含数字签名,该数字签名是加密过的,是用颁发机构的 私钥 对本证书的公钥、名称及其他信息做 hash 散列 加密 而生成的。客户端浏览器会首先找到该证书的根证书颁发机构,如果有,则用该根证书的 公钥解密 服务器下发的证书,如果不能正常解密,则就是 ” 发现异常 ”,说明该证书是伪造的。

补充:一对公钥、私钥既可公钥加密,对应的私钥解密也可私钥加密,对应的公钥解密。这样,就可以使通信的一方拥有私钥 (保守方),一方(公众) 拥有公钥

5. 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,然后客户端和服务端的通信就可以通过这个随机值来进行加密和解密了。

6. 服务端解密信息
服务端 用私钥解密 后,得到了客户端传过来的 随机值,至此一个非对称加密的过程结束,看到 TLS 利用非对称加密实现了身份认证和密钥协商。然后把内容通过该值进行对称加密。

7. 传输加密后的信息
这部分是服务端用 随机值 加密后的信息,可以在客户端被还原。

8. 客户端解密信息
客户端用 之前生成的随机值 解密服务端传送过来的信息,于是获取了解密后的内容,至此一个对称加密的过程结束,看到对称加密是用于对服务器待传送给客户端的数据进行加密用的。整个过程即使第三方监听了数据,也束手无策

整个过程总结:

1. 先发送 https 请求确认加密算法
2. 而后服务端返回一个公钥,客户端确认公钥是否有效
3. 客户端产生随机值,通过公钥加密
4. 服务端通过对应的私钥解密随机值,并将该随机值用来加密传输的正文(相当于该随机值为公钥 - 对称加密)
5. 客户端用之前自己生成的随机值解密正文

整个过程可理解为先利用非对称加密传输对称加密的公钥

https 与 http 的区别

1.https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。2.http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。3.http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。4.http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

参考连接

正文完
 0

HTTP

11次阅读

共计 162 个字符,预计需要花费 1 分钟才能阅读完成。

HTTP 基础

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

正文完
 0