HTTP协议的请求方法

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

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

HTTP协议 (Hyper Text Transfer Protocol)

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

HTTP协议特点

1.http无连接

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

2.http无状态

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

3.客户端/服务端模型

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

4.简单快速

5.灵活

可以传输任何类型的数据

客户端请求消息

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

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

服务器响应消息

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

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

HTTP 请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:PUT, DELETE,CONNECT,OPTIONS 和 TRACE 方法

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

GET 和 POST 比较

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

PATCH 和 PUT 比较

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

GET

以上对应

第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:客户端运行的浏览器类型信息。

Host:头域指定请求的服务器的地址和端口,HTTP/1.1必须包括Host,否则返回400

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保存起来,每次请求携带上认证信息。这部份以后再讲。

响应示例

第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

请求示例

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

HTTP状态码

HTTP状态码分类

HTTP状态列表

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180622G0JI0Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券