HTTP 超文本传输协议

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 超文本传输协议_第1张图片
HTTP 超文本传输协议_第2张图片
在这里插入图片描述

请求头

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)。
HTTP 超文本传输协议_第3张图片

其他请求头
请求头 描述

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

你可能感兴趣的:(并发编程)