HTTP的简单理解

来源:互联网 发布:淘宝宝贝背景图片素材 编辑:程序博客网 时间:2024/04/28 17:53

web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务端的一系列流程

当在浏览器的地址栏内输入URL时,根据URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示在Web页面。


在两台计算机之间使用HTTP协议通信时,在一条通信线路上,必定有一端是客户端,另一端是服务器端(仅从一条通信线路来说,服务器端和客户端是确定的)

(请求必定由客户端发出,服务器端回复响应,也就是说:肯定是先从客户端开始建立通信的,服务器端在没有收到请求之前是不会发送响应的)


发送的请求

GET  /index.htm  HTTP/1.1

Host: hacker.jp

起始行开头的GET表示请求访问服务器的类型,称为方法(method)。随后的字符串/index.htm指明了请求访问的资源对象,也叫做请求URI(request-URI)。最后的HTTP/1.1,即就是HTTP的版本号,用来提示客户端使用的HTTP协议功能。

大概意思就是:请求访问某台HTTP服务器上的/index.htm页面资源


GET:从指定的服务器中获取数据

POST:提交数据给指定的服务器处理

PUT:传输文件,就像FTP协议的文件上传一样(不带验证机制,任何人都可以上传文件,存在安全性问题)

HEAD:获得报文首部(和GET方法是一样的,只是不返回报文主体部分)

DELETE:删除文件(按请求URI删除制定的资源,和PUT一样,不带验证机制)

OPTIONS:询问支持的方法,   如:返回(GET,POST,HEAD)

TRACE:追踪路径,让web服务器端将之前的请求通信环回给客户端的方法;发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减一,当刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应;客户端通过TRACE方法可以查询发送出去的请求是咋样被加工修改的,这是因为想要连接到源目标服务器可能会通过代理中转;但TRACE不常用,容易引发CST(Cross - Site - Tracing,跨站追踪)

客户端 --(trace)--代理服务器--(trace)--代理服务器--(trace)--服务器

        max-forward:2               max-forward:1           max-forward:0

CONNECT:要求用隧道协议连接代理

在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL(Secure Sockets Layer安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输


HTTP是不保存状态的协议

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息

不做持久化处理,当然这也是为了更快的处理大量的事务,确保协议的可伸缩性,而特意把HTTP协议设计的如此简单的

(但是,有时候,我们也要保留用户的状态:比如,我们登录一个网站,然后跳转(必须保证继续登录的状态啊))

不可质疑:不保存状态,可以减少服务器的cpu及内存资源的消耗


Cookie

HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,引入了Cookie技术

1,客户端发送请求,服务器端在响应中添加Cookie后(发送的响应报文内一个叫做Set-cookie的首部字段信息,通知客户端保存Cookie)返回,此刻客户端已经保存Cookie了,

2,下次,客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie后发送过去

3,服务器端发现客户端发送过来的Cookie后,会去检查究竟是从那一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息


1,

GET /reader/ HTTP/1.1

Host: hacker.jp

*首部字段内没有Cookie的相关信息

2,(响应报文,服务器端生成Cookie信息)

HTTP /1.1 200 ok

Date:Thu,12 Jul 2012 07:12:20 GMT

Server:Apache

<Set-Cookie:sid = 1342077140226724;path = /;expires = Wed,10-Oct-12 07:12:20 GMT>

3,(请求报文,自动发送保存着Cookie的信息)

GET /image/ HTTP/1.1

Host: hacker.jp

Cookie: sid = 1342077140226724



持久连接

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,对于以前,传输的主要是容量很小的文本传输,么样什么影响;可是随着HTTP的普及,文档中包含大量图片的情况多了起来

如:发哦那个请求一份包含多张图片的HTML文档对应的Web页面,会产生大量的通信开销(多次断开)。

为了解决上面的问题,出现了持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态(减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。明显的提高了速度,在HTTP/1.1中,所有的连接默认都是持久连接)

管线化

持久连接使得多数请求以管线化方式发送成为可能,以前发送请求后需要等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求,当再次遇到发送多个WEb页面的时候,可以一次发送多个请求(比持久连接快多了)

0 0
原创粉丝点击