美文网首页想法
浏览器工作原理(HTTP)

浏览器工作原理(HTTP)

作者: 兮兮码字的地方 | 来源:发表于2019-03-28 21:17 被阅读0次

    HTTP 协议简介

    浏览器工作的第一步是通过HTTP请求,根据URL 访问服务器获取数据(建立http请求之前还需要 DNS 查询)。

    HTTP是一种应用层的协议,是一个纯文本的协议,规定了必须是基于 TCP 协议(传输层)的,TCP 协议是一条双向的通讯通道,HTTP 在 TCP 的基础上,规定了 Request-Response 的模式。这个模式决定了通讯必定是由浏览器端首先发起的。

    HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息。


    HTTP请求过程

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

    (1)建立TCP连接

    在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80

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

    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令

    例如:GET/sample/hello.jsp HTTP/1.1

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

    浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

    (4)Web服务器应答

    客户机向服务器发出请求后,服务器会客户机回送应答,

    HTTP/1.1 200 OK

    应答的第一部分是协议的版本号和应答状态码

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

    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

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

    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

    (7)Web服务器关闭TCP连接

    一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

    Connection:keep-alive

    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。


    HTTP 协议格式

    浏览器工作原理(HTTP)

    一,HTTP请求

    下面是一个HTTP请求的例子:

    GET /sample.jsp HTTP/1.1
    Accept:image/gif.image/jpeg,*/*
    Accept-Language:zh-cn
    Connection:Keep-Alive
    Host:localhost
    User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
    Accept-Encoding:gzip,deflate                         
    username=jinqiao&password=1234

    1.request line

    第一行被称作 request line,它分为三个部分,请求的“方法”、请求的路径、请求的协议和版本。

    request line 里面的方法跟我们编程中的方法意义类似,表示我们此次 HTTP 请求希望执行的操作类型。方法有以下几种定义:

    GET,POST,HEAD,PUT,DELETE,CONNECT,OPTIONS,TRACE

    浏览器通过地址栏访问页面都是 GET 方法。表单提交产生 POST 方法。

    HEAD 则是跟 GET 类似,只返回请求头,多数由 JavaScript 发起

    PUT 和 DELETE 分别表示添加资源和删除资源,但是实际上这只是语义上的一种约定,并没有强约束。

    CONNECT 现在多用于 HTTPS 和 WebSocket。

    OPTIONS 和 TRACE 一般用于调试,多数线上服务都不支持。

    GET方法 VS POST方法

    GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如

    Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

    从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分,所以提交的数据量不能太大。

    POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。

    2.Request Header (HTTP 头)

    request line后面是请求头。由若干行组成,每行是用冒号分隔的名称和值。是键值对的格式。

    浏览器工作原理(HTTP)

    3.HTTP Request Body(正文)

    请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束。

    接下来的是请求正文。请求正文中可以包含客户提交的查询字符串,文件或者表单数据。

    一些常见的 body 格式是:

    application/json

    application/x-www-form-urlencoded

    multipart/form-data

    text/xml

    我们使用 html 的 form 标签提交产生的 html 请求,默认会产生 application/x-www-form-urlencoded 的数据格式,当有文件上传时,则会使用 multipart/form-data。

    二,HTTP响应

    HTTP响应与HTTP请求相似,HTTP响应也由3个部分构成。

    下面是一个HTTP响应的例子:

    HTTP/1.1 200 OK
    Server:Apache Tomcat/5.0.12
    Date:Mon,6Oct2003 13:23:42 GMT
    Content-Length:112


    <html>
    <head>
    <title>HTTP响应示例<title>
    </head>
    <body>
    Hello HTTP!
    </body>
    </html>


    1.response line

    第一行被称作 response line,它也分为三个部分,协议和版本、状态码和状态文本。

    常见的状态码有以下几种。

    1xx:临时回应,表示客户端请继续。

    2xx:请求成功。

    200:请求成功。

    3xx: 表示请求的目标有变化,希望客户端进一步处理。

    301&302:永久性与临时性跳转。

    304:跟客户端缓存没有更新。

    4xx:客户端请求错误。

    403:无权限。

    404:表示请求的页面不存在。

    5xx:服务端请求错误。

    500:服务端错误。

    503:服务端暂时性错误,可以一会再试。


    2.Response Header

    紧随在 response line 之后,是响应头,每行是用冒号分隔的名称和值。

    浏览器工作原理(HTTP)

    3.HTTP Response Body

    在头之后,以一个空行为分隔,是 /响应体,内容是 html 代码。


    HTTPS

    在 HTTP 协议的基础上,HTTPS 和 HTTP2 规定了更复杂的内容,但是它基本保持了 HTTP 的设计思想,即:使用上的 Request-Response 模式。

    HTTPS 有两个作用,一是确定请求的目标服务端身份,二是保证传输的数据不会被网络中间节点窃听或者篡改。

    HTTPS 是使用加密通道来传输 HTTP 的内容。但是 HTTPS 首先与服务端建立一条 TLS 加密通道。TLS 构建于 TCP 协议之上,它实际上是对传输的内容做一次加密,所以从传输内容上看,HTTPS 跟 HTTP 没有任何区别。


    HTTP 2

    HTTP 2 是 HTTP 1.1 的升级版本。

    HTTP 2.0 最大的改进有两点,一是支持服务端推送,二是支持 TCP 连接复用。

    服务端推送能够在客户端发送第一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存当中,这可以避免客户端请求顺序带来的并行度不高,从而导致的性能问题。

    TCP 连接复用,则使用同一个 TCP 连接来传输多个 HTTP 请求,避免了 TCP 连接建立时的三次握手开销,和初建 TCP 连接时传输窗口小的问题。

    相关文章

      网友评论

        本文标题:浏览器工作原理(HTTP)

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