上一次修改时间:2018-06-12 18:18:02

http协议

  1. HyperText Transfer Protocol------超文本传输协议

    http协议是客户端和服务器之间通讯的协议;

    内容索引:

    image.png

  2. 协议理解

    常见定义:

    image.png

    简单理解:协议就是要通讯的双方,预先定好的通讯规则;

    示例:

    image.png

    image.png

    image.png

    image.png

    image.png

    注:知道了协议本身后,就可以用协议和支持该协议的设备通讯了,如上面在已经知道了飞鸽传书协议的情况下,可以用php来给飞鸽传书这个软件发送消息; 

  3. http历史版本

    image.png

    image.png

    image.png

    注:http0.9只有一行,上面的GET那行就是http0.9的协议本身;

    以下的版本列出的都是新增加的内容: 

    image.png

    image.png 

    image.png

    image.png

    image.png 

    注:1)1.1版本增host后,可以在一个服务器上建立多个网站,只要能用域名区分就行,此前则是一个独立IP的服务器只能建立一个网站;

    2)Connection的默认值变成了keep-alive,http1.1诞生时,网页上的图片和音视频变得比较普遍了,connection的值如果还是原来的close的话,图片及音视频加载时,又要重新走一协议,相当浪费资源;

    3)Transfer-Encoding:chunked------http从1.1开始支持分块传输,可以使得网站的大文件,如图片,可以分块后,边传输边显示已经传过来的块内容;

  4. URL规范及HTTP的交互流程

    image.png

    注:一般的网站是没有username和passwd那一段的;

    image.png

    如访问http://www.test.com时:

    image.png

    之后,如果connection的值是close,连接就会马上断开,如果该值是keep-alive时,就会保持连接状态;

    有代理服务器时,http的工作流程:

    image.png

  5. Fiddler

    Fiddler是一个抓包工具,在里面可以抓取到http的头信息,并对http请求头进行随意修改;

    image.png

  6. http请求

    image.png

    image.png

    注:第三步的请求内容GET请求时,没有该步,POST请求时,才会将如参数或图片的二进制流放在这里上传;

    image.png

    image.png

    注:1)GET请求在HTTP规则中,最长为255个字符,目前,一般的浏览器中,GET最大是1M,即1024个字符;

    2)从本身意义上说,GET是从服务器上获取数据,而POST是上传数据到服务器;另外,POST请求在浏览器在历史记录是找不到的,而GET则能从历史记录上找到,从安全性角度来说,POST比GET要好;

    3)HEAD请求是GET请求后,除去内容的部分,即用HEAD请一个URL时,只会返回HEAD头信息,不会返回请求内容;

    4)PUT请求:从客户端向服务器传送的数据取代指定的文档的内容。PUT请求成功后,返回的状态码是201,不是POST和GET的200;另外,浏览器是没法发送PUT请求,只能通过程序或工具来发送;

    5)DELETE请求:请求服务器删除指定的页面。

    6)TRACE请求:TRACE请求某个服务器的地址时,如果客户端和服务器之间存在代理服务器的话,则会在请求头中记录下该代理服务器的名字,返回的内容是最后到达的那个服务器的请求HEAD;

    7)OPTION请求返回URL允许请求的方法列表,如某个URL只允许GET方式;

    8)CONNECT请求,用于在代理服务器和应用服务器之间建立一个隧道,主要应用于SSL连接;

  7. HTTP请求头详解

    image.png

    image.png

    注:Accept里标明了浏览器接收的文件类型,如果服务器有的话就优先提供这些格式,如果提供不了,也可以接收优先及低的文件类型,如上面示例,有0.9里的类型的话就返回该类型,没有的话0.8也可以;

    image.png

    image.png

    image.png

    注:Accept-Encoding是标明请求的压缩格式的;

    image.png

    注:Authorization是发送身份验证方式的,该请求头是在服务器发送了一个401的响应后,浏览器就可以继续发送该HEAD; 

    image.png

    注:该头信息是用来控制缓存策略的;

    image.png

    注:用来区分需要请求的服务器上哪块内容;

    image.png

    注:用于PUT请求;

    image.png

    image.png

    image.png

    注:HTTP协议允许请求服务器上某个文件的一块内容,如多线程下载时,就是用多个线程同时对服务器上的某一个文件的不同块进行下载;If-Range是检查分断后的数据块有没有变化,如果没变化,则返回该块数据,如果有变化,则返回文件的全部内容;

    image.png

    注:用于PUT请求,用来防止多个人同下载文件后,同时修改产生的文件版本冲突,类似于版本控制软件的版本控制;

    image.png

    注:用于标识请求某个文件的某块数据时的,数据块的信息;

    image.png

    注:切换HTTP协议;

    image.png

    注:TRACE请求,经过的代理服务器的记录;

    image.png

    注:AJAX请求时,会带上这个HEAD,可以利用该HEAD信息来判断是不是一个AJAX请求;

    image.png 

  8. HTTP响应

    image.png

    image.png

    image.png

    常见状态码:

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png 


    image.png

    image.png

    image.png

    image.png

    image.png

    注:418是一个愚人节加入的一个玩笑;

    image.png

    image.png

    image.png

    image.png

    image.png

    注:ETag是服务器上内容生成哈希值,用来表示服务器上的内容是否有变动,可以用来检查客户端的缓存是否有效;

    image.png

    image.png

    image.pngimage.png

    注:Location是指定一个新的位置,Refresh指定刷新的时间和刷新的地址; 

    image.png

    image.png

    注:Vary标明,浏览器保存缓存的时候,需要根据Vary的值,每个值各保存一份缓存; 

  9. Cookie、Session的原理

    image.png

  10. HTTP性能优化

    image.png

    image.png

    image.png

    image.png

    image.png

  11. HTTP安全

    image.png

    image.png

  12. php官网中用php实现HTTP协议示例

    image.png

    注:除了该示例外,php通常使用CURL来实现http请求;