就实际情况而言,两台计算机作为客户端或者服务端的角色可能会互换。但就一条通信线路而言,服务端和客户端的角色是明确的。HTTP协议的两端角色是明确的。

        发送请求的报文例子:
GET /index.htm HTTP/1.1 Host: hackr.jp
       
在这里面,GET表示请求访问服务器的类型,/index.htm表示请求访问的资源对象,也叫作请求URI,HTTP/1.1代表客户端HTTP的版本号,用来提示客户端使用的HTTP协议功能。

        请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体组成。

        响应报文的例子:
HTTP/1.1 200 OK Date : Tue ,10 Jul 2012 06:50:15 GMT Content - Length :362
Content - Type : text/html <html> ... </html>
        这里的HTTP/1.1表示服务端HTTP的版本号,OK是原因语句,下一行是响应时间,下面空一行再写资源实体的主体。

        

       
HTTP协议通过URI定位互联网上的资源,因为URI的特性,互联网上任何位置上的资源都能够访问到,如果不是访问特定的资源而是对服务器自身发起请求,可以用 *
来代替URI。

HTTP方法:

        GET

        获取服务端的资源

        值得注意的是:指定的资源要经过服务器端的解析后才能返回响应,如果请求的是文本,那么就原样返回,如果是程序,那么返回输出结果。

        POST

        用来传输实体的主体。

        GET也可以传输实体的主体,但是一般使用POST进行操作,因为POST的主要目的并不是获取响应的主体内容。

        PUT

        用来向服务端传输文件。

        一般网站不支持PUT,因为PUT不支持验证,很危险。

        DELETE

        用来删除服务端的资源。

        和PUT一样,一般网站不支持。

        HEAD

        获取资源相关信息。

        与GET方法相似,不过HEAD方法不返回报文主体,主要用来确认URI的有效性及资源更新的日期时间。

        OPTIONS

        询问支持的方法。

        用来查询针对请求URI指定资源支持的方法。

        TRACE

        用来了解在物理层传输的过程,经过了多少路由器,收到了怎样的处理。

        CONNECT

        使用隧道协议连接代理。

HTTP的连接:

        持久连接:

        只要任意一端没有明确提出断开连接,则保持TCP的连接状态。

        在HTTP/1.1中,所有的连接默认都是持久连接。

        管线化:

        持久连接使得管线化称为可能。

        即不用等待之前请求的响应就直接发送下一个请求。

        这样的话,可以做到同时并行发送多个请求,而且请求数越多,时间差就越明显。

Cookie管理状态

        HTTP的无状态:

    HTTP是一种不保存状态的协议,即无状态协议,它对于任何的发送过的请求或者响应都不做持久化的处理。

        HTTP不保存状态的优点:轻量级、能够快速处理大量事务、确保协议的可伸缩性。

        使用Cookie:

        Cookie会根据从服务端发送的响应报文中的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。

        当写一次客户端发送请求的时候,客户端会自动将Cookie加入到请求报文中去。

       
当服务端发现从客户端发送过来的Cookie时,会去检查究竟是哪一个客户端发送过来的请求,然后对比在服务器上面的记录,进行验证,就可以得到之前的状态信息。

        参考书籍:《图解HTTP》上野宣 著 于均良 译

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信