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页面的时候,可以一次发送多个请求(比持久连接快多了)
- HTTP的简单理解
- 简单的http协议理解
- iOS 简单理解的http://
- 对HTTP的简单理解
- 对于Http的简单理解
- Http协议的简单理解
- 简单的理解HTTP协议
- HTTP/WebSocket 协议的简单理解
- Http和Https的简单理解
- Http协议简单理解
- Node.js的学习历程六http的简单理解
- 20 --HTTP协议的简单理解及应用
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 关于Http协议与TCP协议的一些简单理解
- 深入理解nginx chap3 开发一个简单的HTTP模块
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- 简单理解Socket及TCP/IP、Http、Socket的区别
- ARP协议工作原理
- Spring学习-helloworld
- 【bzoj1040】[ZJOI2008]骑士 基环+外向树dp
- AngularJS(一)——初识AngularJS
- JAVA中的集合的概念
- HTTP的简单理解
- 常见的HTTP 状态代码及其原因
- CodeForces 669D Little Artem and Dance
- 五一游,清华,北大
- JAVA语言之计数排序
- Geekband009第九周笔记分享
- 动态删除ArrayList中的元素
- 找到满足条件的数组
- Javascript事件全解析——事件概述及传统事件类型