• HTTP协议


    1.HTTP协议简介

    在浏览器中单击链接的时候,浏览器会向服务器发送一段文本,告诉服务器请求的是哪一个网页。这段文本遵循HTTP协议格式,包含访问方式、所用的HTTP版本、所用的浏览器、当前页面地址等信息。服务器知道了网址,便将网页的内容输出给浏览器。输出的内容既可以是HTML文本,也可以是二进制数据如图片、声音、视频等。浏览器会将HTTP文本显示为网页,将二进制内容还原为图片、声音、视频,予以显示或者播放。

    当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?

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

    定义:

    HTTP协议: 超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用最为广泛的种网络协议。用于定义WEB浏览器与WEB服务器之间交换数据的过程。

     2、URL详解

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

    schema://host[:port#]/path/.../[?query-string][#anchor]

    scheme               指定低层使用的协议(例如:http, https, ftp)

    host                   HTTP服务器的IP地址或者域名

    port#                 HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/

    path                   访问资源的路径

    query-string       发送给http服务器的数据

    anchor-             锚

    URL 的一个例子

    http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
    
    Schema:                 http
    host:                   www.mywebsite.com
    path:                   /sj/test/test.aspx
    Query String:           name=sviergn&x=true
    Anchor:                 stuff

    3、HTTP协议的特点

    (1)基千请求/响应模型的协议。 请求和响应必须成对;先有请求后有响应。

    (2)HTTP协议默认的端口:80,例如:www.jd.com:80(HTTP服务器的默认端口是80,这种情况下端口号可以省略)。

    (3)http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.

    (4)打开一个网页需要浏览器发送很多次Request

        1>当你在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html.  服务器把Response发送回给浏览器.

        2>浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。

        3>浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

        4>等所有的文件都下载成功后。 网页就被显示出来了。

    4、HTTP 协议入门

    1)准备工作

    编辑一个form.html的表单页面,如下:

    点击提交按钮:

    先看Request 消息的结构,   Request 消息分为3部分,第一部分叫请求行, 第二部分叫请求头, 第三部分是请求体。 请求头和请求体之间有个空行, 结构如下图

    1>请求行

    请求方式:POST、GET

    请求的资源:/WEB12/form.html

    协议版本:HTTP/1.1

    HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。

    HTTP/1.1,发送请求,创建一次连接,获得多个web资源,保持连接。

    2>请求头

    请求头是客户端发送给服务器端的一些信息,使用键值对表示key:value

    常见请求头

    描述 (红色掌握,其他了解)

    Referer

    浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链

    If-Modified-Since

    浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。

    Cookie

    与会话有关技术,用于存放浏览器缓存的cookie信息。

    User-Agent

    浏览器通知服务器,客户端浏览器与操作系统相关信息

    Connection

    保持连接状态。Keep-Alive 连接中,close 已关闭

    Host

    请求的服务器主机名

    Content-Length

    请求体的长度

    Content-Type

    如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码

    Accept:

    浏览器可支持的MIME类型。文件类型的一种描述方式。

    MIME格式:大类型/小类型[;参数]

    例如:

       text/html ,html文件

       text/css,css文件

       text/javascript,js文件

       image/*,所有图片文件

    Accept-Encoding

    浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩

    Accept-Language

    浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)

    3>请求体

    当请求方式是post的时,请求体会有请求的参数,格式如下:

    username=zhangsan&password=123

    如果请求方式为get,那么请求参数不会出现在请求体中,会拼接在url地址后面

    http://localhost:8080...?username=zhangsan&password=123

     再来看Response消息的结构:

    1>响应行

    Http协议

    状态码:

    常用的状态码如下:

    200 :请求成功。

    302 :请求重定向。

    304 :请求资源没有改变,访问本地缓存。

    404 :请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。

    500 :服务器内部错误。通常程序抛异常。

    状态信息:状态信息是根据状态码变化而变化的

    2>响应头

    响应也都是键值对形式,服务器端将信息以键值对的形式返回给客户端

    常见请求头

    描述

    Location

    指定响应的路径,需要与状态码302配合使用,完成跳转。

    Content-Type

    响应正文的类型(MIME类型)

    取值:text/html;charset=UTF-8

    Content-Disposition

    通过浏览器以下载方式解析正文

    取值:attachment;filename=xx.zip

    Set-Cookie

    与会话相关技术。服务器向浏览器写入cookie

    Content-Encoding

    服务器使用的压缩格式

    取值:gzip

    Content-length

    响应正文的长度

    Refresh

    定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。

    取值:3;url=www.itcast.cn    //三秒刷新页面到www.itcast.cn

    Server

    指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/>

    Last-Modified

    服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。

    3>响应体

    响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容

  • 相关阅读:
    PL/SQL 记录集合IS TABLE OF的使用
    PL/SQL 触发器简介
    plsql 显式游标
    MySQL的基本知识 -- 命令
    排序算法--桶排序
    在C++中实现字符串分割--split
    第一篇献给小驰驰
    解决windows管理员已阻止你运行此应用问题
    centos 7.3 快速安装ceph
    python中int的功能简单介绍
  • 原文地址:https://www.cnblogs.com/peng19920430/p/10087749.html
Copyright © 2020-2023  润新知