• Web基础与http协议


    内容预知

     1.HTML的相关知识

     1.1 HTML 的概念

    1.2 HTML的基本标签

    1.3 HTML的文件结构 

    2.动态网页与静态网页

     2.1 静态网页

     2.2 动态网页

    2.3 动态语言的网页

    3.http的相关知识 

     3.1 http协议的介绍

    3.2 http的方法

    3.3 GET与POST的比较

    3.4 http状态码 

    3.5 http的请求过程

     3.6  HTTP访问的过程


     1.HTML的相关知识

     1.1 HTML 的概念

     

    HTML叫做超文本标记语言,是一种规范,也是一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容。 HTML命令可以说明文字,图形、动画、声音、表格、链接等。

    HTML文件可以使用任何能够生成txt文件的文本编辑器来编辑,生成超文本标记语言文件,只用修改文件名后缀为“.html”或“.htm”即可。

    1.2 HTML的基本标签

    HTML标签采用双标记符的形式,前后标记符对应,分别表示标记开始和结束,标记符中间的内容被标签描述。前标记符由“< XXX>”表示,结尾标记符多了一个“/”,由“< /XXX>”表示。

    1.3 HTML的文件结构 

     

     HTML文件最外层由< html> < /html>表示,说明该文件是用HTML语言描述的。在它里面是并列的头标签(< head>)和内容标签(< body>)。

    1. <html>
    2. <head>网页的头部信息</head>
    3. <body>网页内容</body>
    4. </html>
    HTML的标签
    body外标签作用
    < title>定义了文档的标题
    < base>定义了页面链接标签的默认链接地址
    < link>定义了一个文档和外部资源之间的关系
    < meta>定义了HTML文档中的元数据
    < script>定义了客户端的脚本文件
    < style>定义了HTML文档的样式文件
    body内标签作用
    < table>定义一个表格
    < tr>定义了表格中的一行
    < td>定义了表格中某一行的一列
    < img>定义了一个图像
    < a>定义了一个超链接
    < p>定义了一行
    < br>定义了换行
    < font>定义了字体

    2.动态网页与静态网页

     2.1 静态网页

    在网站设计中,纯粹HTML格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展名是.htm、.html。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。

    静态网页也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字幕等。这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。

    静态网页只要不修改代码,是不会改变的,每天展示的内容是一样的。静态网页只使用html语言,不使用其他高级程序语言。

     2.2 动态网页

    所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着HTML代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非是修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。

    动态网页URL的后缀不是.htm、.html、.shtml、.xml等静态网页的常见网页制作格式,而是以.aspx、.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”。

    动态网页是基本的html语法规范与Java、PHP、C#等高级程序设计语言、数据库编程等多种技术的融合,以期实现对网站内容和风格的高效、动态和交互式的管理。因此,从这个意义上来讲,凡是结合了HTML以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页都是动态网页。

    2.3 动态语言的网页

     早期的动态网页主要采用通用网关接口 CGI(Common Gateway Interface)技术,虽然 CGI 技术已经发展成熟而且功能强大, 但由于编程困难、效率低下、修改复杂,所以有逐渐被新技术取代的趋势。

    (1)PHP

    即Hypertext Preprocessor ( 超文本预处理器),它是当今Internet. 上 最为火热的脚本语言,其语法借鉴了C、 Java、PERL等语言,但只需要很少的编程知识你就能使用PHP建立一个真正交互的Web站点。

    (2)JSP

    即Java Server Pages (Java 服务器页面X,它是由Sun Microsystem 公司于1999年6月推出的新技术,是基于Java Servlet以及整个Java体系的web开发技术。

    (3)Python

    是一种面向对象、跨平台的动态类计算机程序设计语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的大型项目开发。

    注:Python支持的并发量不高,假设python写的脚本需要10台服务器支撑的话,Go语言只需要1台服务器。

    (4)Ruby

    是一种简单快捷的面向对象( 面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto) 开发,遵守GPL协议和Ruby License。 它的灵感与特性来自于Perl、 Smalltalk、 Eiffel、 Ada 以及Lisp语言。

    3.http的相关知识 

     3.1 http协议的介绍

    HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上服务器信息、实体元信息以及可能的实体内容。

    HTTP 已经演化出了很多版本,它们中的大部分都是向下兼容的:

        http 1.0   相较以前版本可以支持POST、HEAD方法,支持HTML文件以外的其他类型,但不支持持久连接


       http 1.1   支持持久连接,即在一个TCP连接里面完成多个http请求和响应,但是每个请求和响应是按照顺序一一对应的


      http 2.0   支持完全多路复用,即不光可以在在一个TCP连接里面完成多个http请求和响应,而且请求和响应不用按照顺序一一对应。 ( 也支持压缩,服务端主动推送)


        http 3.0   基于UDP协议 ,最新版本还在初步推广中

    3.2 http的方法

    HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每条 HTTP 请求报文都包含一个方法, 告诉服务器要执行什么动作,包括:获取一个页面,运行一个网关程序,删除一个文件等。最常用的获取资源的方法是 GET、POST、PUT。


     

    方法作用
    GET对服务器资源获取的简单请求
    PUT向服务器提交数据,以修改数据
    POST用于发送包含用户提交数据的请求
    DELETE删除服务器上的某些资源
    HEAD请求页面的首部,获取资源的元信息
    CONNECT用于ssl隧道的基于代理的请求
    OPTIONS返回所有可用的方法,常用于跨域
    TRACE追踪 请求--响应的传输路径

    1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

    2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,无论进行多少次PUT操作,其结果并没有不同。

    3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,几乎目前所有的提交操作都是用POST请求的。

    4、DELETE请求顾名思义,就是用来删除某一个资源的。

    3.3 GET与POST的比较

    GET 方法

    • 从指定的服务器上获得数据
    • GET请求能被缓存
    • GET请求会保存在浏览器的浏览纪录里
    • GET请求有长度的限制
    • 主要用于获取数据
    • 查询的字符串会显示在URL后缀中,不安全

    POST 方法

    • 提交数据给指定服务器处理
    • POST请求不能被缓存
    • POST请求不会保存在浏览器的浏览纪录里
    • POST请求没有长度限制
    • 查询的字符串不会显示在URL中,比较安全

    3.4 http状态码 

    HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码,当浏览器请求某一 URL 时, 服务器根据处理情况返回相应的处理状态。

    通常正常的状态码为2xx,3xx(如200),如果出现异常会返回4xx,5xx(如404)。

    状态码首位范围含义
    1xx100-101信息提示
    2xx200-206成功
    3xx300-305重定向
    4xx400-415客户端错误
    5xx500-505服务器错误

    常用状态码的具体含义:

    状态码含义
    200一切正常
    301永久重定向
    302临时重定向
    401用户名或密码错误
    403禁止访问(客户端IP地址被拒绝)
    404请求的文件不存在
    414请求URL头部过长
    500服务器内部错误。比如脚本错误,编程语言语法错误
    502无效网关
    503当前服务不可用。web服务器不能处理HTTP请求,可能是临时超载或者是服务器进行停机维护。
    504网关请求超时。程序执行时间过长导致响应超时,例如程序需要执行20秒,而nginx最大响应等待时间为10秒,这样就会出现超时。

    产生502(无效网关)的原因:

    1、数据包没有送到网卡,网络问题;

    2、数据包送进去了(交换机能抓到包),但是网卡没收到,网卡问题或防火墙问题;

    3、网卡接收到了,处理不了,服务问题。(比如服务器当前连接太多,响应太慢;页面素材太多,带宽不够。)

    3.5 http的请求过程

     用户在浏览器输入URL访问时,发起HTTP请求报文,请求中包括请求行、请求头、请求体,服务器收到请求后返回响应报文,包括状态行、响应头、响应体。

    请求报文四部分:

    • 请求行:请求行由请求方法、URL 以及协议版本三部分组成。
    • 请求头:请求头为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
    • 空行:请求头部的最后会有一个空行,表示请求头部结束,接下来为请求体,这一行非常重要,必不可少。
    • 请求体:请求体是请求提交的参数,GET 方法已经在 URL 中指明了参数,所以提交时没有数据。POST 方法提交的参数在请求体中。

    请求头描述
    Host接受请求的服务器地址,可以是 IP:端口号 ,也可以是域名
    User-Agent发送请求的应用程序名称
    Connection指定与连接相关的属性,如Connection:Keep-Alive
    Accept-Charset通知服务端可以发送的编码格式
    Accept-Encoding通知服务端可以发送的数据压缩格式
    Accept-Language通知服务端可以发送的语言

    响应报文四部分:

    • 状态行:状态行由协议版本,状态码,状态码描述三部分组成。
    • 响应头:响应头与请求头部类似,为响应报文添加了一些附加信息。
    • 空行:响应头部的最后会有一个空行,表示响应头部结束。
    • 响应体:服务器返回的相应 HTML 数据,浏览器对其解析后显示页面。

    响应头描述
    Server服务器应用程序软件的名称和版本
    Content-Type响应正文的类型(是图片还是二进制字符串)
    Content-Length响应正文长度
    Content-Charset响应正文使用的编码
    Content-Encoding响应正文使用的数据压缩格式
    Content-Language响应正文使用的语言

     

     3.6  HTTP访问的过程

    关于TCP的三次握手与四次挥手,在我之前的博客有详细描述:
    一次性学会传输层协议相关内容(站在外面干啥呢?点进来看看啊)_站在这别动,我去给你买橘子的博客-CSDN博客https://blog.csdn.net/qq_62462797/article/details/125764066?spm=1001.2014.3001.5501

    HTTP访问的过程:

    1、客户端通过域名进行访问,先进行DNS域名解析。

    2、之后客户端请求与web服务器建立TCP连接(三次握手)。

    3、建立连接后,客户端向web服务器发送一个HTTP请求。

    4、服务器响应HTTP请求,客户端的浏览器得到HTML代码。

    5、浏览器解析HTML代码,并请求HTML代码中的资源。(浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器去请求下载。)

    6、断开TCP连接(四次挥手),浏览器对页面进行渲染呈现给用户。

  • 相关阅读:
    Android---DVM以及ART对JVM进行优化
    【数据整理】FROM_GLC等土地覆盖数据整理
    【稳定性】浅谈11.11大促之预案演练 | 京东物流技术团队
    Java文件读写数据流
    聚类集成算法原理
    【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
    黑鲨给电脑重装系统的详细步骤
    来自北大算法课的Leetcode题解:69. x的平方根
    Spring的事务详解
    从零开始的C++(三)
  • 原文地址:https://blog.csdn.net/qq_62462797/article/details/126961357