HTTP学习笔记01
参考内容:
昨天通过读文档、读博文、看教程学习了一下HTTP协议,发现真是“天下文章一大抄”,这种现象无可厚非,毕竟知识本身也就只有那些内容,并且博文里也注明了参考链接,大家也都见怪不怪了,但是连很明显的病句都是一模一样,那就有点尴尬了。我写学习笔记肯定也会“抄”(哈哈,piapia打脸)。
一、协议概述
超文本传输协议是(英语:HyperText Transfer Protocol,缩写:HTTP)是一个客户端和服务端之间请求和应答的标准,主要规定了客户端与服务器之间的通信格式,通常使用TCP协议(尽管TCP/IP协议是互联网上最流行的应用,但是在HTTP协议中并没有规定它必须使用或它支持的层。事实上HTTP可以在任何互联网协议或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用,所以其在TCP/IP协议族使用TCP作为其传输层)。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
二、请求方法
请求方法是客户端告诉服务器其动作意图的方法,区分大小写,HTTP/1.1协议中共定义了8种方法(也叫“动作”)来以不同方式操作指定的资源。
- GET 请求指定的资源。使用
GET
的请求应该只用于获取数据。 - POST 发送数据给服务器,请求主体的类型由 C
ontent-Type
首部指定。 - HEAD 请求资源的头部信息, 并且这些头部与GET方法请求时返回的一致。
- PUT 使用请求中的数据替换目标资源。
- DELETE 用于删除指定的资源。
- OPTIONS 用于获取服务器所支持的方法。
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
- TRACE 实现沿通向目标资源的路径的消息环回(loop-back)测试 ,提供了一种实用的 debug 机制。
- PATCH 用于对资源进行部分修改。(由RFC 5789指定的方法)
三、状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态码的第一个数字代表当前响应的类型:
-
- 1XX 消息 请求已被服务器接收,继续处理
- 2XX 成功 请求已成功被服务器接收、理解并接受
- 3XX 重定向 需要后续操作才能完成这一请求
- 4XX 客户端错误 请求含有语法错误或无法被执行
- 5XX 服务器错误 服务器在处理某个正确请求时发生错误
常用状态码:
-
- 200 OK 客户端请求成功
- 302 Found 临时重定向。该状态码表示请求的资源已经被分配了新的URL,但是和301的区别是302代表的不是永久性的移动,只是临时的。
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解,需要修改后再次发送。
- 401 Unauthorized 请求未经授权,需要有通过HTTP认证的认证信息。这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden 服务器收到请求,但是拒绝提供服务,因为没有获得服务器访问权限、IP被禁止等。
- 404 Not Found 请求资源不存在。也可以在服务器拒绝请求且不想说明理由时使用。
- 500 Internal Server Error 服务器发生不可预期的错误,很有可能是服务端程序的Bug或者临时故障。
- 503 Server Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上情况需要的时间,最好写入Retry-After字段再返回给客户端。
- 504 Gateway Timeout 网关超时,是代理服务器等待应用服务器响应时的超时,和408 Request Timeout的区别就是504是服务器的原因而不是客户端的原因。
四、待续
HTTP的知识还有很多,诸如报文、URL、版本等等,这里写不动了,不写了。