zoukankan      html  css  js  c++  java
  • http协议

    一、浏览器访问服务器的过程

          当浏览器输入网址后,会在本地找对应的域名,找到的话,把IP地址返回,若找不到,就把这个网址放到DNS(Domain Name System域名解析系统)中去找解析,找到对应的IP地址后,返回给浏览器,然后再把这个IP地址发送到远程服务器,服务器服务器会返回HTML标记给浏览器,浏览器负责渲染展现出来,DNS再找不到的话,就会报错,无法发送IP地址给服务器,自然得不到想要的资源了。下面用两张图为相应的流程:

    二、HTTP概念

          超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

      HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。

          超文本传输协议是一种应用层协议。

    1. 链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡.

    2. 网络层:处理分组在网络中的活动,比如分组的选路.

    3. 运输层:主要为两台主机上的应用提供端到端的通信.

    4. 应用层:负责处理特定的应用程序细节.

     三、HTTP请求报文格式

        3.1 使用谷歌/火狐浏览器 开发者工具来分析通信过程和格式

      

          这里介绍 谷歌开发者工具使用

          windows和Linux平台按F12调出开发者工具, MAC选择 视图 -> 开发者工具。

          在 web 应用中, 服务器把网页传给浏览器, 实际就是把网页的 HTML 代码发送给浏览器, 浏览器解析显示出来. 而浏览器和服务器之间的传输应用层协议就是 HTTP. 所以:

    • HTML 是一种用来定义网页的文本, 会 HTML 就可以编写网页.
    • HTTP 是用来在网络上传输 HTML 文本的协议, 用于浏览器和服务器的通信.

          Chrome 浏览器提供了一套完成的开发者工具, 很适合 web 开发者. 

                                                         ( 打开开发者工具)

                                                                               (开发者工具界面)

    • 元素(Elements):用于查看或修改HTML元素的属性、CSS属性、监听事件、断点等.
    • 控制台(Console):控制台一般用于执行一次性代码, 查看JavaScript对象, 查看调试日志信息或异常信息.
    • 源代码(Sources):该页面用于查看页面的HTML文件源代码、JavaScript源代码、CSS源代码, 此外最重要的是可以调试JavaScript源代码, 可以给JS代码添加断点等.
    • 网络(Network):网络页面主要用于查看 header 等与网络连接相关的信息.

          注意: Network 中的每一项就是一次请求/响应过程, 点击每一项, 可查看本次请求响应的报文信息.

        3.2 请求报文格式

          3.2.1 请求报文的协议格式

         

    Request Headers 中就是请求的报文数据内容. 下面就是我们要请求的报文示例数据:

    GET / HTTP/1.1
    Host: localhost:10000
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7

    就是浏览器向服务器请求数据时候的格式

          http请求又包含了四个部分:

    1. 请求行(request-line)
    2. 请求头(request-header)
    3. 空行
    4. 请求数据(request-content),也叫作请求内容或者请求主体

     

    3.2.2 请求行

        请求行又可以分成三个部分:

        请求方式 请求路径 协议版本

         其中,GET就是请求方式(还有post请求方式),/model/list_father.php就是请求路径,HTTP/1.1就是协议版本号

         需要注意的几点:

         1, 请求行需要单独的占一行,用来说明当前请求的最基本的信息

         2, 请求路径是不包括域名的

         3, HTTP协议以前是1.0版本,现在是1.1版本

    3.2.3 请求头

        请求头就是所有当前需要用到的协议项的集合!

        协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,或者一些事先的约定!

        常见的请求头有:

        host: 当前url中所要请求的服务器的主机名(域名)

        

          accept-encoding:是浏览器发给服务器,声明浏览器支持的压缩编码类型 比如gzip

        accept_charset:表示,浏览器支持的字符集

        referer:表示,此次请求来自哪个网址

     

        accept-language:可以接收的语言类型,cn,en,有权重的高低之分

    cookie:如果之前当前请求的服务器在浏览器端设置了数据(cookie),那么当前浏览器再次请求该服务器的时候,就会把对应的数据带过去

    3.2.4 空行

        就是用来分离请求头和请求数据,意思就是请求头到此结束!(注意:空行是必须存在的,不能省略)

    3.2.5 请求数据

        只有post方式提交的时候,才有请求数据!

     请求报文格式总结:

    3.3 HTTP响应报文协议格式

    也就是服务器向浏览器作出响应(反馈数据)时候的协议!

    http响应也分成了四个部分:

    1. 响应行(状态行)

    2. 响应头

    3. 空行

    4. 响应主体(响应数据)

    如何使用开发者工具查看请求报文, 以请求 Baidu.com 为例:

     

    HTTP/1.1 200 OK
    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8
    Date: Wed, 14 Mar 2018 09:52:48 GMT
    Server: BWS/1.1

    3.3.1 响应行

        第一行 HTTP/1.1 200 OK 叫做响应行, 共分成3部分:协议版本号 状态码 状态描述

    比如:

    HTTP/1.1 200 OK

    注意:

    状态码和状态描述是一一对应的!

    常见的状态码:

    3.3.2  响应头

    也是一些协议的集合,也是

    协议名:值 的形式!

    常见的有:

    server:服务器主机信息

    3.3.3 空行

         用来分割响应头与响应主体,也就是响应头到此结束!

    3.3.4 响应数据

    就是服务器反馈给浏览器的数据!

    响应报文总结

    四、长连接和短连接

    在HTTP/1.0中, 默认使用的是短连接.也就是说, 浏览器和服务器每进行一次HTTP操作, 就建立一次连接, 但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web 页中包含有其他的Web资源,如js文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

    但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

    Connection:keep-alive
    

    在真正的读写操作之前,server与client之间必须建立一个连接,

    当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,

    连接的建立通过三次握手,释放则需要四次握手,

    所以说每个连接的建立都是需要资源消耗和时间消耗的。

    TCP短连接

    模拟一种TCP短连接的情况:

    1. client 向 server 发起连接请求
    2. server 接到请求,双方建立连接
    3. client 向 server 发送消息
    4. server 回应 client
    5. 一次读写完成,此时双方任何一个都可以发起 close 操作

    在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

    从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

     TCP长连接通信过程

    1. client 向 server 发起连接

    2. server 接到请求,双方建立连接

    3. client 向 server 发送消息

    4. server 回应 client

    5. 一次读写完成,连接不关闭

    6. 后续读写操作...

    7. 长时间操作之后client发起关闭请求

    TCP长/短连接的优点和缺点

    • 长连接可以省去较多的TCP建立和关闭的操作,节约时间。但是如果用户量太大容易造成服务器负载过高最终导致服务不可用
    • 短连接对于服务器来说实现起来较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但是如果用户访问量很大, 往往可能在很短时间内需要创建大量的连接,造成服务器响应速度过慢

    总结:

    • 小的WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源来让套接字 保持存活-keep alive

    • 对于中大型WEB网站一般都采用长连接,好处是响应用户请求的时间更短,用户体验更好,虽然更耗硬件资源一些,但这都不是事儿。另外,数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误

    和格式

  • 相关阅读:
    Docker安装IBM MQ
    Spark On Yarn搭建及各运行模式说明
    Hadoop2.0之YARN组件
    HBase记录
    Spark对接Kafka、HBase
    SparkStreaming个人记录
    Java解决异常之try、catch、finally、throw、throws&log4j记录日志步骤
    Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)
    租赁车辆(多车)程序
    考试答案对应
  • 原文地址:https://www.cnblogs.com/yu110812/p/9491795.html
Copyright © 2011-2022 走看看