美文网首页Web前端之路让前端飞程序员
Web前端基础【4】--HTTP标准

Web前端基础【4】--HTTP标准

作者: 爱吃西瓜的番茄酱 | 来源:发表于2017-11-09 08:32 被阅读146次
    image

    HTTP协议(超文本传输协议),是用于从www服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,减少网络传输。

    一:HTTP请求过程

    HTTP协议采取的是请求响应模型:即客户端发起请求,服务器端回送。HTTP协议是一个无状态的协议,同一个客户端的这次请求与上次请求没有对应关系。

    一次HTTP操作称为一个事务,其执行过程可分为四步,如下图:

    image

    1:首先客户端与服务器端需要建立连接,例如单击某个超链接。

    2:建立连接后,客户端发送一个请求给服务器,请求方式的格式:统一资源标识符(url)、协议版本号、后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。

    3:服务器接到请求后,给予相应的响应信息,其格式为一个状态码,包括信息的协议版本号。一个成功或者错误的代码,后边是MIME信息。

    4:客户端接到服务器所返回的信息,通过浏览器将信息显示到用户的显示屏上,然后客户端与服务器端断开连接。

    二:HTTP状态码含义:

    HTTP状态码主要是为了标志此次HTTP请求的运行状态。下面是常见的HTTP状态吗:
    1:200———请求成功。
    2:301———资源(网页等)被永久转移到其他URL。
    3:404———请求的资源(网页)不存在。
    4:500———内部服务器错误。

    HTTP状态码由三个十进制数组成,第一个十进制数定义了状态码的类型。HTTP状态码共分为五种类型,如下图:

    image

    三:HTTP头部信息:

    HTTP头部信息由众多的头域组成,每个头域由一个域名、冒号(:)、和域值三部分组成。

    通过浏览器访问百度首页时,右键检查,在里面查看整个HTTP访问的过程,首先是浏览器发出请求,请求头的数据如下:

    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:en,zh-CN;q=0.8,zh;q=0.6 
    Cache-Control:max-age=0 
    Connection:keep-alive 
    Cookie:BAIDUID=5B0DE8754CD9C7FD0B4606751125D30A:FG=1; BIDUPSID=5B0DE8754CD9C7FD0B4606751125D30A; PSTM=1497970650; __cfduid=df9fa56b6193a39ac162e322f7aa7a0021508679057;pgv_pvi=150157120;BDRCVFR[ird_eQEYn]=mk3SLVN4HKm;pgv_si=s9886431232;BDRCVFR[ISR1xZMpC9b]=mk3SLVN4HKm; BD_HOME=0; BD_UPN=12314553; H_PS_645EC=b833N3G6NF8lbH9RZXAkMCCKgHYIsKg3GGzIzAnQQh4vXLe1OO9RS00JdtU; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_CK_SAM=1; PSINO=1; BDSVRTM=154; H_PS_PSSID=1463_24565_21111_24879 
    Host:www.baidu.com 
    Referer:https://www.baidu.com/ 
    Upgrade-Insecure-Requests:1 
    User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36
    

    在请求头中包含以下内容:

    1:Accept请求报头域

    ,用于指定客户端接受哪些类型的信息,例如:text/html表明客户端希望接受文本信息或者HTML网页信息。

    2:Accept-Encoding:

    用于指定可接受的内容编码。

    3:Accept-Language:

    用于指定一种自然语言。

    4:Cache-Control:

    用于指定缓存指令,缓存指令是单向的,且是独立的。

    5:Connection:

    指定连接的选项,例如:keep-alive表示连接的状态是连续的

    6:Cookie:

    将状态保存在客户端。

    7:Host:

    用于指定请求资源的intenet主机和端口号。

    8:Referer:

    告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

    9:Upgrade-Insecure-Requests:

    为1,则是告诉服务器,浏览器可以处理https协议。

    10:User-Agent:

    包含发出请求的用户信息,其中有使用的浏览器型号、版本和操作系统的信息。

    请求发送成功后,服务器进行响应,接下来看一下响应头的信息:

    HTTP/1.1200OKB
    dpagetype:1
    Bdqid:HTTP0xd831b4de00001d40
    Bduserid:0
    Cache-Control:private
    Connection:Keep-Alive
    Content-Encoding:gzip
    ContentType:text/html;charset=utf-8
    Cxy_all:baidu+87abafa180337e66f63a0cfac6a710b6
    Date:Wed, 08 Nov 2017 11:35:39 GMT
    Expires:Wed, 08 Nov 2017 11:35:22 GMT
    Server:BWS/1.1
    Set-Cookie:BDSVRTM=0; path=/
    Set-Cookie:BD_HOME=0; path=/
    Set-Cookie:H_PS_PSSID=1463_24565_21111_24879; path=/; domain=.baidu.com
    Strict-Transport-Security:max-age=172800
    Transfer-Encoding:chunked
    Vary:Accept-Encoding
    X-Powered-By:HPHP
    X-Ua-Compatible:IE=Edge,chrome=1
    

    响应头中包含以下内容:

    1:HTTP/1.1

    表示使用HTTP1.1协议标准,200表示请求成功。

    2:Bdpagetype

    : 我暂时这个不知道什么意思。

    3:Bdqid:

    暂时不知道什么意思。

    4:Bduserid:

    暂时不知道什么意思。

    5:Cache-Control:

    用于指定缓存指令,缓存指令是单向的,且是独立的。

    6:Connection:

    指定连接的选项,例如:keep-alive表示连接的状态是连续的

    7:Content-Encoding:

    被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码。

    8:Content-Type:

    用于指明发送给接收者的实体正文的媒体类型。

    9:Cxy_all:

    暂时不知。

    10:Date:

    表示消息产生的日期和时间。

    11 :Expires:

    给出响应过期的日期和时间。

    12:Server:

    包含了服务器用来处理请求的软件信息。

    13:Set-Cookie:

    setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。

    14:Strict-Transport-Security:

    它的作用是,对某些站点,当用户在浏览器输入不带协议的网址的时候,自动识别协议为https,而不是http。例如用户输入paypal.com,浏览器会自动访问https://paypal.com,而不:http://paypal.com

    15:Transfer-Encoding:

    chunked表示输出的内容长度不确定。

    16:Vary:

    Accept-Encoding 响应头,明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本。

    17:X-Powered-By:

    这个值的意义用于告知网站是用何种语言或框架编写的。

    18:X-Ua-Compatible:

    X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的。通过设置X-UA-Compatible的值,可以指定网页的兼容性模式设置。在网页中指定的模式优先权高于服务器中(通过HTTP Header)所指定的模式。IE=edge告诉IE使用最新的引擎渲染网页,chrome=1则可以激活ChromeFrame。

    四:Cookie状态管理:

    cookie和session都用作来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题所作的努力。其中,cookie将状态保存在客户端,session将状态保存在服务器端。

    Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

    由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

    Cookie实际上是一小段的文本信息。

    客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

    Session是另一种记录客户状态的机制

    不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

    如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

    五:HTTP请求方式:

    如下图:

    | 1 | :GET : 请求指定的页面信息,并返回实体主体。
    | 2 | :HEAD :类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    | 3 | :POST :向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    | 4 | :PUT :从客户端向服务器传送的数据取代指定的文档的内容。
    | 5 | :DELETE :请求服务器删除指定的页面。
    | 6 | :CONNECT : HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    | 7 | :OPTIONS :允许客户端查看服务器的性能。
    | 8 | :TRACE : 回显服务器收到的请求,主要用于测试或诊断。

    其中常用的请求方式是GET和POST:

    1:GET方式:

    向特定的资源发出请求。

    2:POST 方式:

    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

    GET和POST的区别:

    1:在客户端,get方式通过url提交数据,数据在url中可以看见;post方式,数据放置在实体区提交。

    2:get方式提交的数据最多只能有1024字节,而post则没有限制。

    3:安全性问题,使用get的时候,参数会显示在地址栏中,而post不会。

    4:get请求在访问网页是很常见,post请求则常用在登录框、提交框的位置。

    相关文章

      网友评论

        本文标题:Web前端基础【4】--HTTP标准

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