HTTP请求详解

HTTP版本

  • HTTP/0.9

​ 只在1991年最早规模使用的版本,如今不再使用。在该版本中只有GET一种请求方法,并且仅能访问HTML格式的资源。

  • HTTP/1.0

​ 增加了POST和HEAD请求方法,根据Content-Type可以支持多种数据格式。请求行必须在尾部添加协议版本字段(HTTP/1.0),必须包含头消息。并且支持长连接(但默认还是使用短连接),缓存机制以及身份认证。

  • HTTP/1.1

​ HTTP/1.1是目前使用的最广泛的协议版本。在该版本中引入了持久连接,默认长连接。一个TCP连接可以允许多个HTTP请求。同时新增了PUT、PATCH、OPTIONS、DELETE五种请求方法。在请求消息和响应消息都支持Host头域。

  • HTTP/2.0

​ 这个版本于2015正式发布,主要通过支持请求与响应的多路重用来减少延迟,通过压缩http头字段将协议开销降到最低,同时增加了对请求优先级和服务器推送的支持。

请求方法

请求方法 方法作用
GET GET请求会显示请求指定的资源,一般由于数据资源的读取操作,在url末尾可以追加查询字符串,请求的body中只能包含很少数据,依据浏览器和服务器的不同而不同
POST 主要用来向服务器新增数据,请求的主体理论上可以包含任意多数据
HEAD HEAD与GET方法一样,只是不返回报文的主体部分,主要用于确认url的有效性及资源更新的日期时间。判断类型、查看响应中的状态码、测试资源是否被修改过、查看服务器性能
PUT 用来传输文件,在请求报文的主体内容中包含文件内容,保存到请求URL指定的位置,http1.1的PUT方法自身不带验证机制,任何人都可以请求,上传文件,会有安全问题
DELETE 删除服务器上某个资源
OPTIONS 查询服务器支持的请求方法
TRACE 可以对请求消息的传输路径进行追踪
CONNECT 要求在与代理服务器通信时建立隧道,实现用隧道协议进行tcp通信。主要使用ssl(安全套接层)和tls(传输层安全)协议把通信内容加密后经网络隧道传输
PATCH 与PUT请求类似,同样用于资源的更新,但有两点不同,一是PATCH一般用于资源的部分更新,而PUT用于资源的整体更新;二是当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已存在的资源进行更新

GET与POST区别:

1.GET用于信息获取,对服务器来说它是安全的,而POST请求用于修改服务器上的资源。
2.GET请求的数据附在URL之后,POST方法提交的数据则放置在http报文实体的主体。所以对于数据来说,POST安全性比GET高。
3.GET传输数据量一般在2kb,原因在于GET提交数据是附在URL之后,http虽然对于URL数据长度没有限制,但是不同的浏览器或服务器对于URL长度是有限制的。理论上,POST是没有大小限制的,但出于安全角度考虑,服务器软件在实现时会做一定限制。

HTTP请求头

选项 说明
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 告诉服务器,当前客户端可以接收的文档类型,其实这里包含了/,就表示什么都可以接收
Accept-Encoding: gzip, deflate 支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送
Accept-Language: zh-cn,zh;q=0.5 当前客户端支持的语言,可以在浏览器的工具选项中找到语言相关信息
Cache-Control:no-cache 告诉浏览器不要缓存的响应头
Connection: keep-alive 客户端支持的链接方式,保持一段时间链接,默认为3000ms
Referer: http://localhost:8080/hello/index.jsp 请求来自哪个页面
Content-Type: application/x-www-form-urlencoded 表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制
Content-Length:13 请求体的长度,这里表示13个字节
Host:localhost 请求的主机名为localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的

HTTP请求返回状态码

200 OK  当您的操作将在响应正文中返回数据时,出现此结果。
204 No Content 当您的操作成功,但不在响应正文中返回数据时,出现此结果。
304 Not Modified(重定向)  当测试实体自上次检索以来是否被修改时,出现此结果。
403 Forbidden   客户端错误
401 Unauthorized 客户端错误
413 Payload Too Large(客户端错误) 当请求长度过长时,出现此结果。
400 BadRequest(客户端错误) 当参数无效时,出现此结果。
404 Not Found(客户端错误) 当资源不存在时,出现此结果。
405 Method Not Allowed(客户端错误)由于方法和资源组合不正确而出现此错误。 例如,您不能对一个实体集合使用 DELETE 或 PATCH。
412 Precondition Failed  客户端错误
501 Not Implemented(服务器错误) 当未实施某个请求的操作时,出现此结果。
503 Service Unavailable(服务器错误) 当 Web API 服务不可用时,出现此结果。

参考链接

https://juejin.im/post/5bc6aa5ae51d450e4d303d2c

https://blog.csdn.net/qq_22238021/article/details/81197157

https://blog.csdn.net/weixin_44338712/article/details/107130988

https://www.cnblogs.com/weibanggang/p/9454581.html

posted @ 2020-07-21 17:10  菜包胖嘟嘟  阅读(148)  评论(0编辑  收藏  举报