• 深入理解HTTP协议


    转载请注明出处。

    HTTP协议

    http协议(HyperText Transfer Protocol)超文本传输协议,它是web的核心。它由两部分程序组成:一个客户机程序,和一个服务器程序,运行在不同的端系统中,通过http报文进行通信。

    http协议定义了web客户机如何向web服务器请求web页面,下图描述了http请求-响应行为

    http使用tcp作为支撑它的运输层协议。http客户机发起一个与服务器的tcp连接,一旦建立连接,浏览器和服务器的进程就可以通过套接字接口访问tcp,即客户机和服务器都是从套接字接口发送和接受http请求响应报文。

    服务器向客户机发送请求的文件时,并不存储任何关于该客户机的状态信息。例如,如果某个客户机在短短的几秒内两次请求同一个对象,服务器并不会因为刚刚为该客户机提供了该对象就不再做出反应,而是重发该对象。因为http服务器并不保存关于客户机的任何信息,所以说http是一个无状态协议。

    http报文:

    http请求报文:

    GET / HTTP/1.1
    Host: www.baidu.com
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Referer: https://www.baidu.com/link?url=obzLuyOUYW11LrNDIU2yRzoPwdmLPk9f5cEpfaTg94C&wd=&eqid=a3bc8e960001512c0000000359ed941c
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.8
    Cookie: BAIDUID=67AEF0073F3217BB987B8E3E0BE9D7B8:FG=1; BIDUPSID=67AEF0073F3217BB987B8E3E0BE9D7B8; PSTM=1507210253; ispeed_lsm=2; H_PS_645EC=054d%2BmDKhEXJiVpPbgNr%2F4c7HmAHKkJA2qidsOLqOF8muEcdRi2o0tWASzI; BD_CK_SAM=1; PSINO=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_HOME=0; H_PS_PSSID=1429_19033_21104_17001_24022_20928; BD_UPN=12314753

    (实体主体)

    以上是浏览器访问 www.baidu.com时的http请求报文

    下面就请求报文进行分析:

    GET / HTTP/1.1

    此行被叫做请求行,包括三个字段:方法字段、URL字段和HTTP协议版本字段。

    方法字段可以取值:GET、POST、HEAD、PUT、DELETE 绝大部分都是用GET

    上面报文中,请求的URL是 / 即请求的路径是 / 根目录

    HTTP/1.1:http协议版本 版本字段一般自解释。

    之后的行被称为首部行

    Host: www.baidu.com    定义了目标主机名称。也许有人会认为此行不需要,因为已经有一个TCP连接了,但是这个首部行所提供的信息是web代理高速缓存所需要的。

    Connection: keep-alive   定义了连接是长连接,即持久连接,http1.1版本默认长连接,如需短连接,需要将此参数改为colse

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36   用户代理,即浏览器版本,内核之类的信息

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8   客户端希望接受的数据类型,q客户端的喜好程度值在0-1之间

    Referer: https://www.baidu.com/link?url=obzLuyOUYW11LrNDIU2yRzoPwdmLPk9f5cEpfaTg94C&wd=&eqid=a3bc8e960001512c0000000359ed941c    Referer主要用来让服务器判断来源页面, 即用户是从哪个页面来的,通常被网站用来统计用户来源,是从搜索页面来的,还是从其他网站链接过来,或是从书签等访问,以便网站合理定位.

    Accept-Encoding: gzip, deflate, br    客户端希望接受的数据编码格式

    Accept-Language: zh-CN,zh;q=0.8     客户端希望接受的语言类型,同样q指的是喜好程度

    Cookie   关于cookie 下文详细介绍

    http响应报文:

    HTTP/1.1 200 OK
    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8
    Date: Mon, 23 Oct 2017 07:03:01 GMT
    Expires: Mon, 23 Oct 2017 07:02:04 GMT
    Server: BWS/1.1
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=0; path=/
    Set-Cookie: H_PS_PSSID=1429_19033_21104_17001_24022_20928; path=/; domain=.baidu.com

    (实体主体)

    与上文中的请求报文相对应

    下面就响应报文进行分析:

    HTTP/1.1 200 OK   

    状态行,有三个字段:协议版本、状态码、响应的状态信息

      常见状态信息:

      200 OK  请求成功

      301 Moved Permanently  请求对象被永久转移

      400 Bed Request  通用差错代码,表示请求不能被服务器理解

      404 Not Found  请求的文档不在服务器上

      505 HTTP Version Not Supported  服务器不支持请求所用的http版本

    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8    此三项解释同请求中的。

    Date: Mon, 23 Oct 2017 07:03:01 GMT   服务器产生并发送该响应报文的日期和时间。这个时间不是指对象创建或者最后修改时间,而是服务器从他的文件系统中检索到该对象插入到响应报文中,并发出该报文的时间

    Expires: Mon, 23 Oct 2017 07:02:04 GMT  过期时间,即服务器告诉高速代理服务器这个副本在多长时间内是新鲜的,过了这个时间缓存服务器就会向服务器请求,看看文档是否被修改。

    Server: BWS/1.1   报文是由BWS服务器产生。BWS是百度的web服务器

    Set-Cookie   同之前请求中的request报文中的cookie 将在下面详细讨论

    http中的cookie

    之前说http服务器是无状态的,这样简化了服务器的设计。但是一个web服务器,通常希望服务器能够识别用户,为此,http使用了cookie,它允许服务器追踪用户。

    cookie技术包括四部分:

      http响应报文中的cookie首部行

      http请求报文中的cookie首部行

      在用户端系统中保留一个cookie文件,由用户的浏览器管理

      在web站点有一个后端数据库

    下面用一张图解释cookie的工作原理:

  • 相关阅读:
    childnodes 兼容性问题
    1,点我呜呜,不点哈哈 2,定时器
    js中的request
    变背景图片位置
    linq contain和orderby
    VueMusic-5首页-音乐榜单
    VueMusic-4首页-视图适配
    VueMusic-3.-今日推荐-视图适配
    lodash---1.使用实列
    VueMusic-2.今日推荐-数据获取
  • 原文地址:https://www.cnblogs.com/wulaa/p/7717824.html
Copyright © 2020-2023  润新知