HTTP协议的作用及特点[size=0.97]
HTTP是一个客户端和服务器端请求与应答的标准,客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或其他工具,向客户端发起一个到服务器上指定端口(默认端口号80)的HTTP请求。我们称这个客户端叫user agent,应答的服务器端(网站)存储着一些HTML文件或图像等信息,这个服务器我们称之为origin server。在用户代{过}{滤}理和源服务器中间可能存在多个中间层,如代{过}{滤}理、网关或者tunnels(隧道)。HTTP可以用在任何其他互联网协议上,HTTP只假定可靠的传输。[size=0.97]
由HTTP客户端发起一个请求,建立一个到服务器指定端口的TCP连接,HTTP服务器则在那个端口监听客户端发过来的请求,收到请求后,服务器发回客户端一个状态行,比如“HTTP/1.1 200 OK ”,和响应的信息。HTTP用TCP的原因在于,TCP可以提供传输控制,错误纠正、按顺序组织数据的功能。[size=0.97]
通过HTTP或HTTPS协议请求的资源由URLs来标识- 基于请求/响应模型的协议。请求和响应必须配对,先有请求再有响应
- 简单快速:客户端向服务器请求服务时,只需要请求方法和路径。请求方法常用的有GET 、HEAD、POST
- 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型用Connent-Type标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完请求,并收到应答后,即断开连接,这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议,无状态是指对于事物处理没有记忆能力,缺少状态意味着无法处理前面传输的信息,有问题需要重传,这样可能导致每次连接传送的数据量增大;另一方面,在服务器不需要前面的信息的时候他应答就很快
HTTP协议的版本[size=0.97]
HTTP/1.0 发送请求 创建一次连接,获得一个web资源,连接断开[size=0.97]
HTTP/1.1 发送请求 创建一次连接,获得多个web资源,连接断开HTTP协议的组成[size=0.97]
HTTP协议由HTTP请求和HTTP响应组成。HTTP请求包括:请求行、请求头、请求体,响应相似。[size=0.97]
请求行:例如 POST/chapter17/user.html HTTP/1.1[size=0.97]
格式 : 请求方式 资源路径 协议/版本[size=0.97]
请求行必须在HTTP请求格式的第一行- get请求:将请求参数追加在url后面,不安全,url长度限制get请求方式数据大小,没有请求体,一般的HTTP请求大多都是GET
- POST请求:请求参数在请求体处,较安全,请求数据大小没有显示,只有表单设置为method=“post”才是post请求,其他都是get请求,常见get请求如地址栏直接访问、<a href="">、<img src="">等
- HEAD请求:HEAD和GET相似,不过服务端接受到HEAD请求时只返回响应头,不发送响应内容,所以当只看页面状态时,用HEAD更有效,因为省去传输页面内容的时间。
- DELETE请求:删除某一个资源
- OPTIONS请求:用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET、POST”
- PUT请求:把一个资源存放在指定的位置上,本质上讲,PUT和POST极为相似,都是向服务器发送数据,但他们之间有一个重要的区别,PUT通常指定了资源的存放位置,而POST没有,POST的数据存放位置由自己决定。
- TRACE请求:回显服务器的请求,用于测试或诊断。
- CONNECT请求:CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代{过}{滤}理服务器,通常用于SSL加密翻译为一起的连接与非加密的HTTP代{过}{滤}理服务器的通信。
REST:[size=0.97]
全称是表述性状态转移。表述指的是资源,任何需要被引用的,只要有被引用的必要,它就是资源。要让资源有一个唯一的标识,在Web中这个唯一的标识就是URI,URI既可以当成是资源的地址,也可以看成是资源的名称,如果这些信息没有能用URL标识表示,那它就不能算是一个资源,只能算是资源的一些信息。URI的设计应该遵循可寻址性原则,具有自描述性,需要在形式上给人以直觉上的关联。[size=0.97]
URI设计的技巧:- 使用-或者_来让URI可读性更好
- 使用 / 来表示资源的层级关系
- 使用 ? 用来过滤资源
- 使用 , 或者 ; 可以用来表示同级资源的关系
[size=0.97]
统一资源接口:[size=0.97]
RESTful架构应该遵循统一接口原则,统一接口包括了一组受限的预定义操作,不论用什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET、PUT、POST,并遵循这些方法的语义。GET、DEKETE、PUT、POST的典型用法:[size=0.97]
GET:- 安全且幂等
- 获取表示
- 变更时获取表示(缓存)
- 200 OK -表示已在响应中发出 204(无内容) -资源有空表示 301 (Move Permanently) -资源的URI已被更新 303 (See Other-其他,如负载均衡 304(not modified)-资源未更改(缓存)
- 400(bad request)-指代坏请求,如参数错误 404(not found)-资源不存在 406(not acceptable)-服务端不支持所需表示
- 500(internal server error)-通用错误响应 503(Service Unavaliable)-服务器端无法处理请求
[size=0.97]
PUT:[size=0.97]
POST:- 不安全且不幂等
- 使用服务端管理的实例号创建资源
- 创建子资源
- 部分更新资源
- 如果未被修改,则更新资源(乐观锁)
[size=0.97]
DELETE:HTTP请求报文头属性[size=0.97]
常见请求头:- Referer:表示这个请求是从哪个URL跳转过来的(直接访问就不会有这个请求头)
- Accept:告诉服务端,请求所能支持的响应类型,如html、css、js(MIME类型)
- if-Modified-Sincce:预览器通知服务器,本地缓存的最后变更时间。
- Cookie:客户端的Cookie通过这个报文属性传给服务端。
- User-Agent:预览器通知服务器,客户端预览器与操作系统相关信息。
- Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close表示已关闭
- Host:请求的服务器主机名。
- Content-Length:请求体的长度。
- Content-Type:请求的与实体对应的MIME信息。如果是Post请求,会有这个头。
状态码:[size=0.97]
1** :指示信息,表示请求已接收,继续处理。 [size=0.97]
2**:成功,表示请求已被成功接受,处理。 - 200 OK
- 204 No Content:无内容。服务器成功处理但是未返回内容
[size=0.97]
3**:重定向 - 301 Moved Permanently:永久重定向,表示请求的资源已经永久搬到了其他位置。
- 302 Found:临时重定向,表示请求的资源临时搬到了其他位置。
- 303 See Other:临时重定向,应使用GET定向获取请求资源。
[size=0.97]
4**:客户端错误 - 400 Bad Request:客户端有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在
[size=0.97]
5**:服务器端错误,服务器未能实现合法的请求。 - 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端请求,一段时间后可能恢复。
Cookie:[size=0.97]
由于HTTP是无状态的,而服务器端的业务必须是有状态的,Cookie最初的目的是未来存储web中的状态信息,以方便服务器端的使用。 - cookie的处理步骤 (1)服务器向客户端发送Cookie (2)预览器将cookie保存(3)之后每次的HTTP请求,预览器都会将cookie发送给服务端
- 服务器端的发送与解析
|