HyperText Transfer Protocol------超文本传输协议
http协议是客户端和服务器之间通讯的协议;
内容索引:
协议理解
常见定义:
简单理解:协议就是要通讯的双方,预先定好的通讯规则;
示例:
注:知道了协议本身后,就可以用协议和支持该协议的设备通讯了,如上面在已经知道了飞鸽传书协议的情况下,可以用php来给飞鸽传书这个软件发送消息;
http历史版本
注:http0.9只有一行,上面的GET那行就是http0.9的协议本身;
以下的版本列出的都是新增加的内容:
注:1)1.1版本增host后,可以在一个服务器上建立多个网站,只要能用域名区分就行,此前则是一个独立IP的服务器只能建立一个网站;
2)Connection的默认值变成了keep-alive,http1.1诞生时,网页上的图片和音视频变得比较普遍了,connection的值如果还是原来的close的话,图片及音视频加载时,又要重新走一协议,相当浪费资源;
3)Transfer-Encoding:chunked------http从1.1开始支持分块传输,可以使得网站的大文件,如图片,可以分块后,边传输边显示已经传过来的块内容;
URL规范及HTTP的交互流程
注:一般的网站是没有username和passwd那一段的;
如访问http://www.test.com时:
之后,如果connection的值是close,连接就会马上断开,如果该值是keep-alive时,就会保持连接状态;
有代理服务器时,http的工作流程:
Fiddler
Fiddler是一个抓包工具,在里面可以抓取到http的头信息,并对http请求头进行随意修改;
http请求
注:第三步的请求内容GET请求时,没有该步,POST请求时,才会将如参数或图片的二进制流放在这里上传;
注: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连接;
HTTP请求头详解
注:Accept里标明了浏览器接收的文件类型,如果服务器有的话就优先提供这些格式,如果提供不了,也可以接收优先及低的文件类型,如上面示例,有0.9里的类型的话就返回该类型,没有的话0.8也可以;
注:Accept-Encoding是标明请求的压缩格式的;
注:Authorization是发送身份验证方式的,该请求头是在服务器发送了一个401的响应后,浏览器就可以继续发送该HEAD;
注:该头信息是用来控制缓存策略的;
注:用来区分需要请求的服务器上哪块内容;
注:用于PUT请求;
注:HTTP协议允许请求服务器上某个文件的一块内容,如多线程下载时,就是用多个线程同时对服务器上的某一个文件的不同块进行下载;If-Range是检查分断后的数据块有没有变化,如果没变化,则返回该块数据,如果有变化,则返回文件的全部内容;
注:用于PUT请求,用来防止多个人同下载文件后,同时修改产生的文件版本冲突,类似于版本控制软件的版本控制;
注:用于标识请求某个文件的某块数据时的,数据块的信息;
注:切换HTTP协议;
注:TRACE请求,经过的代理服务器的记录;
注:AJAX请求时,会带上这个HEAD,可以利用该HEAD信息来判断是不是一个AJAX请求;
HTTP响应
常见状态码:
注:418是一个愚人节加入的一个玩笑;
注:ETag是服务器上内容生成哈希值,用来表示服务器上的内容是否有变动,可以用来检查客户端的缓存是否有效;
注:Location是指定一个新的位置,Refresh指定刷新的时间和刷新的地址;
注:Vary标明,浏览器保存缓存的时候,需要根据Vary的值,每个值各保存一份缓存;
Cookie、Session的原理
HTTP性能优化
HTTP安全
php官网中用php实现HTTP协议示例
注:除了该示例外,php通常使用CURL来实现http请求;