HTTP(Hyper Text Transfer Protocol),超文本传输协议,是一种建立在TCP上的无状态连接的应用层协议。
请求方法
HTTP/1.1协议定义了八种通用的请求方法,来以不同方式操作指定的资源:
HTTP1.0 定义了 GET, POST 和 HEAD 方法;
HTTP1.1 新增了 OPTIONS、PUT、DELETE、TRACE 和 CONNECT 方法;
除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如,RFC 5789 扩展了 PATCH 方法。
方法 | 安全性 | 幂等性 | 描述 |
---|---|---|---|
GET | 是 | 是 | 向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在网络应用程序中。其中一个原因是GET可能会被网络蜘蛛等随意访问。参见安全方法 |
POST | 否 | 否 | 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。 |
HEAD | 是 | 是 | 与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。 |
PUT | 否 | 是 | 向指定资源位置上传其最新内容。 |
DELETE | 否 | 是 | 请求服务器删除Request-URI所标识的资源。 |
TRACE | 是 | 是 | 回显服务器收到的请求,主要用于测试或诊断。 |
OPTIONS | 是 | 是 | 这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。 | ||
PATCH | 否 | 否 | 由 RFC 5789 扩展,是对 PUT 方法的补充,用来对已知资源进行局部更新 |
安全性
对于GET和HEAD方法而言,除了进行获取资源信息外,这些请求不应当再有其他意义。也就是说,这些方法应当被认为是“安全的”。 客户端可能会使用其他“非安全”方法,例如POST,PUT及DELETE,应该以特殊的方式(通常是按钮而不是超链接)告知客户可能的后果(例如一个按钮控制的资金交易),或请求的操作可能是不安全的(例如某个文件将被上传或删除)。
幂等性
假如在不考虑诸如错误或者过期等问题的情况下,若干次请求的副作用与单次请求相同或者根本没有副作用,那么这些请求方法就能够被视作“幂等(idempotence)”的。GET,HEAD,PUT和DELETE方法都有这样的幂等属性,同样由于根据协议,OPTIONS,TRACE都不应有副作用,因此也理所当然也是幂等的。
状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型。
状态码 | 分类 | 描述 |
---|---|---|
1xx | 消息 | 请求已被服务器接收,继续处理 |
2xx | 成功 | 请求已成功被服务器接收、理解、并接受 |
3xx | 重定向 | 需要后续操作才能完成这一请求 |
4xx | 请求错误 | 请求含有词法错误或者无法被执行 |
5xx | 服务器错误 | 服务器在处理某个正确请求时发生错误 |
常用状态码
状态码 | 描述 | 释意 |
---|---|---|
100 | Continue | 继续,客户端应继续其请求 |
101 | Switching Protocols | 切换协议,服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功 |
201 | Created | 已创建,成功请求并创建了新的资源 |
202 | Accepted | 已接受,已经接受请求,但未处理完成 |
301 | Moved Permanently | 永久移动,请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动,与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址,与301类似。使用GET和POST请求查看 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
消息结构
HTTP的消息格式由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
请求头
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。
Content-Encoding
https://blog.csdn.net/u014569188/article/details/78912446
Content-Type
https://blog.csdn.net/manbudezhu/article/details/80747244
https://www.cnblogs.com/sunfie/p/8997323.html
https://www.jianshu.com/p/be183553bcfd
https://imququ.com/post/four-ways-to-post-data-in-http.html
http://byteliu.com/2019/03/20/HTTP-POST请求中RequestPayload和FormData的区别?/
https://blog.51cto.com/13570193/2108347
https://cloud.tencent.com/developer/article/1412569
Content-Length
Connection
在HTTP1.0,单一TCP连接内仅执行一个“客户端发送请求—服务器发送应答”周期,之后释放TCP连接。在HTTP1.1优化支持持续活跃连接:客户端连续多次发送请求、接收应答;批量多请求时,同一TCP连接在活跃(Keep-Live)间期内复用,避免重复TCP初始握手活动,减少网络负荷和响应周期。此外支持应答到达前继续发送请求(通常是两个),称为“流线化”(stream)。
其他请求头
请求头 | 描述 |
---|---|
HTTP2.0
https://www.cnblogs.com/heluan/p/8620312.html
https://blog.csdn.net/taiyangdao/article/details/80883189
http://ju.outofmemory.cn/entry/346601
https://www.oschina.net/news/90325/spring-boot-2-0-0-m6-available-now
https://blog.csdn.net/jaune161/article/details/82879044
https://zhuanlan.zhihu.com/p/26559480
参考文献
https://zh.wikipedia.org/wiki/超文本传输协议
https://www.runoob.com/http/http-tutorial.html
https://www.cnblogs.com/chenliyang/p/6558756.html