HTTP协议的请求方法

Posted 经典技术架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议的请求方法相关的知识,希望对你有一定的参考价值。

经典架构技术文章第一时间送达!

从来没想过要写关于http协议请求方式的,可是今天遇到一位同事,竟然对HTTP的请求方式一点都不了解,所以决定总结一下,也记录一下。


HTTP协议 (Hyper Text Transfer Protocol

HTTP是一个基于TCP/IP通信协议来传递数据,包括html文件、图像、结果等,即是一个客户端和服务器端请求和应答的标准。

HTTP协议特点

1.http无连接

限制每次连接只处理一个请求,服务端完成客户端的请求后,即断开连接。(传输速度快,减少不必要的连接,但也意味着每一次访问都要建立一次连接,效率降低)


2.http无状态

对于事务处理没有记忆能力。每一次请求都是独立的,不记录客户端任何行为。(优点解放服务器,但可能每次请求会传输大量重复的内容信息)


3.客户端/服务端模型

客户端支持web浏览器或其他任何客户端,服务器通常是apache或者iis等


4.简单快速


5.灵活

可以传输任何类型的数据


客户端请求消息

客户端发送一个请求到服务器的请求消息包括以下格式:

    请求行,请求头部,空行,请求数据 (图片来自网络)

HTTP协议的请求方法


服务器响应消息

服务器响应包括如下格式:

    状态行,消息报头,空行,响应正文 

HTTP协议的请求方法


HTTP 请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:PUT, DELETE,CONNECT,OPTIONS 和 TRACE 方法

HTTP协议的请求方法


用于特定请求的方式还有几种:

HTTP协议的请求方法


GET 和 POST 比较

HTTP协议的请求方法

注意:以上只是一种规范,如果非要给get加上request body,或者给post的url上带上参数,技术上没有任何问题。


PATCH 和 PUT 比较

HTTP协议的请求方法

注意:比如更新一个userinfo,包含name,age,sex等多个字段,如果只修改了age,如果用put来更新,则需要把其他没有变更的也要提交到服务器,但是使用patch,则只需要提交age到服务器即可。这都是协议层面来讨论的。


GET

HTTP协议的请求方法

以上对应

第1行 请求行

    请求方法(get)+空格+url(https://testrail-tools.trendmicro.com/portal/admin/getTimerInitStatus)+空格+协议版本(HTTP/1.1)

第2-10都是请求头部

   Accept:表示客户端接受的内容类型,按照先后顺序表示客户端接收数据的先后次序

    X-Requested-With:以x开头的是非http标准,一般是某种技术的出现而定义的;这里是用来判断是http请求还是ajax请求。

    Referer:从这个页面访问请求行里的url

    Accept-Language:客户端接受内容返回优先选择的语言

    Accept-Encoding:客户端可以接受的服务器对返回内容进行编码压缩的格式。

    User-Agent:客户端运行的浏览器类型信息。

    Connection:表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, web服务器需要在返回给客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然 后在正式写出内容之前计算它的大小。

    Cookie:http请求时,会把保存的cookie也发送服务器。cookie是保存在客户端里的,分为内存cookie和硬盘cookie。前者随着浏览器关闭而消失,后者由过期时间或者用户手动清除。因为http请求是无状态的,所以服务器为了认证,会生成sessionid,让浏览器setcookie保存起来,每次请求携带上认证信息。这部份以后再讲。


响应示例

HTTP协议的请求方法

第1行 状态行

第2-8 消息报头

    Server:包含处理请求的服务器信息,包含多个产品注释和标识。

    Cache-Control:告知缓存机制是否可以缓存和类型,private是只能当前用户,不能被共享。

    Expires:响应过期时间

    X-Application-Context:application配置,这里表示读取的是application-prod.properties

    Content-Type:返回数据的类型和字符编码格式

    Transfer-Encoding:告知接收端,报文采取了何种编码,chunked表示服务器无法确定消息大小,一般比如下载等,就采用chunked。

    Date:返回消息的时间

第 9 行 空行

第 10 行 响应正文

    消息报头指定了是返回json字符串。


POST

请求示例

HTTP协议的请求方法

第1行同 get

第2-13 行 请求头部

    Content-Length:告知服务器,请求数据的大小

    Origin:origin类似refered,但比refered更人性化,origin只出现在post中,而origin也不携带敏感信息和具体url路径。

    Content-Type:http请求提交内容的编码类型,一般只有post需要设置。application/x-www-form-urlencoded(缺省)和multipart/form-data。

第14行 空行

第15行 请求数据


响应示例

HTTP协议的请求方法

其他这里就不累述了。

说了这么多,这么多请求方式都是http协议的标准,你完全可以随心所欲,全部用post或者全部用get,但是你要是开发的是商业产品,那你就要为你自己的随便买单咯。好比删除一样东西,如果用get请求方式:http:/xxxx/delete?id=123,那你很快就知道,啥叫自作孽不可活。另外这些标准也能让其他人一眼就能知道具体所要做的意思。


HTTP状态码

HTTP状态码分类

HTTP协议的请求方法


HTTP状态列表

HTTP协议的请求方法

HTTP协议的请求方法

HTTP协议的请求方法

HTTP协议的请求方法

HTTP协议的请求方法

如需查看更多技术架构文章,长按下面二维码关注,获取大量经典架构技术,让我们一起学习架构技术支持,成长为架构师。

经典技术架构

ID:tuhao_programer

互联网 | 海量高可用 | 应用技术架构丨大数据丨机器学习 | 云计算   


以上是关于HTTP协议的请求方法的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议的请求方法

HTTP协议的常用请求方法及其描述

HTTP协议的请求方法

HTTP协议----请求方法和状态码

HTTP协议中POSTGETHEADPUT等请求方法以及一些常见错误

http协议请求方法