美文网首页
漫谈http和https

漫谈http和https

作者: 大鹏的鹏 | 来源:发表于2018-12-13 11:17 被阅读0次

    一.http.

    定义: HTTP即超文本传输协议(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
    规则: HTTP遵循请求(Request)/应答(Response)模型。 由客户端向服务器端发起建立连接请求(三次握手)连接以后发起请求消息,即Request;然后服务器返回响应到客户端,即Response,然后客户端和服务器之间的链接断开(四次挥手)。
    HTTP的工作过程: 当我们请求一个超链接时,HTTP就开始工作了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后做相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据做相应的处理,就是最终我们看到的内容。这些过程是HTTP自动完成的,我们只是输入或点击请求地址,然后查看前端给我们展示的内容。

    image.png
    步骤详解(自理解Http请求与响应):
    1. 建立TCP连接

    在HTTP工作开始之前, Web浏览器首先要通过网络与Web服务器建立连接, 该连接是通过TCP来完成的, 该协议与IP协议共同构建Internet, 即著名的TCP/IP协议族, 因此Internet又被称作是TCP/IP网络.
    HTTP是比TCP更高层次的应用层协议, 根据规则, 只有低层协议建立之后才能进行更高层协议的连接, 因此, 首先要建立TCP连接, 一般TCP连接的端口号是80.
    TCP连接中我们比较熟悉的就是三次握手, 但是为什么是三次而不是两次或四次呢? 这里我想到了一个比喻来让大家明白.

    敌人封锁江面, 我方间谍和联络员只能通过电报机隔着江面交流. 但是那时的电报机质量不稳定, 有可能会出现失灵的情况. 所以就出现了如下对话:
    间谍: 联络员, 你能收到我发的话么? 你要是能收到, 就说明我这个电报机可以发电报.
    联络员: 间谍, 我收到你发的话了, 这说明我的电报机可以收. 但是我不确定我的电报机能不能发, 你能收到我发的这句话么? 你要是能收到, 就说明我的电报机是可以发电报的. 
    间谍: 联络员, 我收到你的话了. 我的电报机也是能发能收, 我们可以正式交流情报了.
    

    希望通过这个故事让大家明白为什么会有tcp三次握手.

    2. Web浏览器向Web服务器发送请求命令

    一旦建立了TCP连接, Web浏览器就会向Web服务器发送请求命令
    例如:GET/sample/hello.jsp HTTP/1.1

    3. Web浏览器发送请求头信息

    浏览器发送其请求命令之后, 还要以头信息的形式向Web服务器发送一些别的信息, 这些信息用来描述浏览器自己. 之后浏览器发送了一空白行来通知服务器, 表示它已经结束了该头信息的发送. 若是post请求, 还会在发送完请求头信息之后发送请求体.

    4. Web服务器应答

    客户机向服务器发出请求后, 服务器会向客户机回送应答.
    HTTP/1.1 200 OK
    应答的第一部分是协议的版本号和应答状态码

    5. Web服务器发送应答头信息

    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档. 最后以一个空白行来表示头信息发送到此结束.

    6. Web服务器向浏览器发送数据

    Web服务器向浏览器发送头信息后, 它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

    7. Web服务器关闭TCP连接

    一般情况下, 一旦Web服务器向浏览器发送了请求数据, 它就要关闭TCP连接(四次挥手). 如果浏览器或者服务器在其头信息加入了这行代码
    Connection:keep-alive
    TCP连接在发送后将仍然保持打开状态. 于是, 浏览器可以继续通过相同的连接发送请求. 保持连接节省了为每个请求建立新连接所需的时间, 还节约了网络带宽.


    image.png

    第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

    第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

    第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

    第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

    1.2.http报文解剖 (自HTTP请求行、请求头、请求体详解)

    1.2.1 请求报文剖析:

    HTTP请求报文由3部分组成(请求行+请求头+请求体):


    image.png

    ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST.
    ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,
    ③是协议名称及版本号。
    ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
    ⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

    请求地址
    URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
    组成:<协议>://<主机>:<端口>/<路径>
    端口和路径有时可以省略(HTTP默认端口号是80)

    image.png
    1.2.2 响应报文剖析:

    HTTP的响应报文也由三部分组成(响应行+响应头+响应体):


    image.png

    ①报文协议及版本;
    ②状态码及状态描述;
    ③响应报文头,也是由多个属性组成;
    ④响应报文体,即我们真正要的“干货”

    1.2.3 响应状态码

    1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
    2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.(常见200 表示响应成功)
    3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
    4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。(常见404表示不存在资源)
    5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
    

    二.https

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。因此我们就需要用到https.


    image.png

    相关文章

      网友评论

          本文标题:漫谈http和https

          本文链接:https://www.haomeiwen.com/subject/hzkvhqtx.html