HTTP
HTTP请求方法
HTTP请求方法表明了要对给定资源执行的操作,每一个请求方法都实现了不同的语义,包括:GET,HEAD.POST,PUT,PATCH,DELECT,OPTIONS,以及不常用的CONNECT,TRACE.
GET
获取服务器的指定资源。
HEAD
与 GET 方法一样,都是发出一个获取服务器指定资源的请求,但服务器只会返回 Header 而不会返回 Body。用于确认 URI 的有效性及资源更新的日期时间等。一个典型应用是下载文件时,先通过 HEAD 方法获取 Header,从中读取文件大小 Content-Length
;然后再配合 Range
字段,分片下载服务器资源
POST
提交资源到服务器或者在服务器上新建资源
PUT
:替换整个目标资源
PATCH
:替换目标资源的部分内容
DELETE
:指定的资源。
OPTIONS
:用于描述目标资源的通信选项。可以用于检测服务器支持哪些 HTTP 方法,或者在 CORS 中发起一个预检请求,以检测实际请求是否可以被服务器所接受
CONNECT
:建立一个到由目标资源标识的服务器的隧道
TRACE
:执行一个消息环回测试,返回到服务端的路径。客户端请求连接到目标服务器时可能会通过代理中转,通过 TRACE 方法可以查询发送出去的请求的一系列操作(图示)
幂等的
一个HTTP方法是幂等的,指的是同样的请求执行一次与执行多次的效果是一样的 ,幂等方法不应该具有副作用。
- 常见的幂等方法: GET HEAD PUT DELETE OPTIONS
- 常见的非幂等方法:POST
安全的
一个HTTP方法是幂等的,说明此方法只对服务器进行只读的方法,不会修改服务器数据。
- 常见的安全方法:GET,HEAD,OPTIONS
- 常见的不安全方法:PUT,DELETE,POST
- 所有安全的方法都是幂等的;有些不安全的方法如 DELETE 是幂等的,有些不安全的方法如 PUT 和 DELETE 则不是
可缓存的:GET、HEAD。
GET与POST的区别
GET | POST | |
---|---|---|
应用 | 获取浏览器的数据 | 添加/修改浏览器的数据 |
历史记录 / 书签 | 可保留在浏览器历史记录中,或者收藏为书签 | 不可以 |
Cacheable | 会被浏览器缓存 | 不会缓存 |
幂等 | 幂等,不会改变浏览器上的资源。 | 非幂等 |
后退/刷新 | GET是无害的 | 重复提交POST表单 |
参数位置 | query 中(直接明文暴露在链接中) | query 或 body 中 |
参数长度 | 2KB(2048个字符) | 无限制 |
HTTP状态码
信息响应(100–199)
- 100 Continue:表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应
成功响应(200-299)
- 200 OK
- 201 Created 该请求已成功,并因此创建了一个新的资源,这通常是在POST请求之后后悔的响应
- 204 No Content:该请求已成功处理,但是返回的响应报文不包含实体的主体部分。通常用于只需要从客户端往服务器发送信息,而不需要返回数据时
- 206 Partial Content:服务器已经成功处理了部分 GET 请求,该请求必须包含
Range
头信息来指示客户端希望得到的内容范围。通常使用此类响应来实现断点续传,或者将一个大文档分为多个片段然后并行下载
重定向(300-399)
301 Moved Permanently:永久性重定向
302 临时性重定向,常见应用场景是是通过 302 跳转将所有的 HTTP 流量重定向到 HTTPS
303 See Other :和302有着相同的功能,但303明确要求客户端应该采用GET方法获取资源
304 Not Modified:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应不包含消息体
307 Temporary Redirect:临时重定向。307 与 302 之间的唯一区别在于,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化;而如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET
客户端错误(400- 499)
- 400 Bad Request :请求报文中存在语法问题,或者参数有误。
- 401 Unauthorized:未认证(没有登录)
- 403 Forbidden :没有权限(登陆了但没有权限)
- 404 Not Found :找不到资源
- 405 Method Not Allowed
服务器错误(500-599)
500 Internet Server error :服务器遇见了不知道如何处理的情况
502 Bad Gateway:网关错误,作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的
Service Unavailable:服务器无法处理请求,常见原因是服务器因维护或重载而停机