计算机网络 HTTP协议

  一、HTTP协议介绍

  HTTP协议由两个部分实现,他们运行在不同的端系统中(一个客户机程序,一个服务器程序),通过交换HTTP报文,进行会话。Web浏览器实现了HTTP协议的客户机端,即浏览器是Web应用的用户代理;Web服务器实现了HTTP的服务器端。

  每个URL地址由两部分组成:存放对象的服务器主机名和对象(所请求资源)的路径名。

  HTTP使用TCP作为底层运输协议。HTTP客户机先发起一个与服务器的TCP连接,一旦建立连接,浏览器和服务器进程就可以通过套接字访问TCP(TCP为HTTP提供一个可靠的数据传输服务)。

  HTTP服务器不保存关于客户机的任何信息,所以HTTP是无状态协议。

  二、HTTP报文

  (可以参考这篇文章)

  1、HTTP请求报文

  • 请求行(request-line):  方法——URL——HTTP协议/版本
  • 请求头(headers):  请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。
  • 空行(blank line)
  • 请求正文(request-body):使用GET方法,正文为空;POST方法,会有正文(提交表单),此时正文为用户的输入值;HEAD类似GET,服务器会对此进行响应,但是不返回请求对象(可用于故障跟踪)。
    /*典型的HTTP请求报文*/
    /*请求方法为GET,所以没有请求主体*/
    GET /somedir/page.html HTTP/1.1
    Host:www.someschool.edu
    Connection:close
    User-agent:Mozilla/4.0
    Accept-language:fr

      

  2、HTTP响应报文

  • 状态行(status-line): 协议版本(HTTP Version)——状态码(Status Code)——短语(Reason Phrase)
  • 响应头(headers):
  • 空行(blank-line)
  • 响应正文(response-body):
/*上述请求的响应报文*/
//状态行
HTTP/1.1 200 OK        
//下面是响应首部行
//告诉客户机在报文发送完后关闭了该TCP连接
connection:close
Date:Thu,03 Jul 2003 12:00:15 GMT
Server:Apache/1.3.0(Unix)
//对象创建或最后修改的日期和时间
Last-Modified:Sun, 5 May 2003 12:23:24 GMT
//表明被发送对象的字节数
Content-Length:6821
//表明实体中的对象是HTML文本
Content-Type:text/html

(data  data  data  data ...)

/*常见的状态码和短语*/
/*
200 OK:请求成功,信息包含在返回的响应报文中
301 Mover Permanently:请求的对象已经被永久转移了,新的URL在响应报文的Location:首部行中指定。
400 Bad Request:一个通用差错代码,表示该请求不能被服务器解读。
404 Not Found:被请求的文档不在该服务器上。
505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
*/

   另一个请求报文:

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

  3、浏览器和响应器(包括缓存服务器)都可以向请求报文或响应报文中的头部插入信息,具体插入哪些信息和诸多因素有关。

  三、用户与服务器交互——cookie

  HTTP服务器是无状态的,即它不保存关于客户机的任何信息。cookie技术则实现了对用户信息的跟踪。

  1、cookie技术由四个部分组成:

  (1)HTTP响应报文中有一个cookie首部行;

  (2)HTTP请求报文中有首部行;

  (3)用户端系统中保留有一个cookie文件,由浏览器管理;

  (4)在Web站点有一个相关的后端数据库(记录用户信息)

 

  2、cookie如何被使用

  • 浏览器访问使用cookie技术的网站,如电商,发送请求;
  • web服务器收到请求,将会为用户产生一个唯一的识别码,并以次为索引在它的后端数据库产生一个项;
  • 接着,用一个包含set-cookie(识别码)首部行的响应报文发送给浏览器;
  • 浏览器收到报文,在它管理的特定cookie文件中添加记录:服务器主机名和识别码
  • 此后的每一个请求,浏览器都会从cookie文件中获取同网站的识别码,放入报文头

四、Web缓存

  Web缓存服务器,也叫代理服务器,能够代表初始服务器满足HTTP请求的中间服务器。它自己的磁盘存储空间,保存最近请求过的资源对象的拷贝。

  1、应用过程

  (1)浏览器建立到代理服务器的TCP连接,向它里面的对象发送HTTP请求;

  (2)代理Server检查本地是否存储了对象的拷贝,若有,直接做出响应;

  (3)若没有,代理服务器与对象资源所在的初始Server建立TCP连接,向它发出请求,初始服务器会做出应答。

  (4)代理服务器收到了相应的对象,在本地拷贝一份,然后响应转发给浏览器

  2、一个问题:存放在代理服务器中的对象的拷贝已经过时了,如何处理?

  通过条件GET方法——HTTP协议有一种机制,允许缓存服务器证实它的对象是最新的。

  条件GET请求报文——请求报文使用GET方法;请求报文中包含一个if-Modified-Since首部行

  因为代理服务器存储的拷贝对象存储了最后的修改时间,所以当这个对象在隔一段时间又被浏览器请求时,缓存器会发送一个条件GET给初始服务器(有上次修改的时间)。然后,初始服务器向代理Server发送一个响应报文,其中的状态码会只是代理服务器是否可以使用拷贝对象。(304 Not Modified)

  

原文地址:https://www.cnblogs.com/bigbigbigo/p/8679580.html