HTTP请求报文

我们在网址上输入搜索内容按下回车后,会发生什么,结果大家当然熟悉,但是现在我们要来探讨一下中间的执行过程。

如我在百度搜索引擎上输入“HTTP请求报文”执行,浏览器会自动将我的输入信息打包成http请求报文发送给服务器,服务器解析后进行相应的反馈,将我的搜索结果打包成响应报文发过来,浏览器接收并解析,再将信息通过网页渲染加载出来。

而返回过来的网址为,https://www.baidu.com/s?ie=UTF-8&wd=HTTP%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87

此网址由于是通过GET请求的,信息会直接显示在路径的?后面,如ie=UTF-8,wd=HTTP····(后面看上去像是乱码的其实是中文转码)

我们现在就来看看HTTP请求报文最常用的两种方式

GET:向服务器请求数据

POST:向服务器发送数据

注意get上的数据会直接明文显示在路径中,所以不安全,但其实post也只是稍微相对安全而已,信息很容易就被第三方获取了,实际上http都不安全,安全得使用https加密及数字证书等方式。

我们先随便看看请求头是怎么样的,我就直接在CSDN编辑页面中打开看看,得到以下截图:

authority:资源所在的主机名,此为mp.csdn.net

method:请求方法,此为GET

path:主机上资源所在的路径,此为······如图

scheme:协议名,https,那没事了,https咱们有机会在另一篇文章见,回归正题看看http吧

HTTP GET请求报文效果图如下:

python http

---- 请求行 ----
GET / HTTP/1.1  # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: www.itcast.cn  # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36  # 用户代理,也就是客户端的名称
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型
Accept-Encoding: gzip, deflate # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: pgv_pvi=1246921728; # 登录用户的身份标识
 
---- 空行 ----

GET请求原始报文说明:

GET / HTTP/1.1\r\n
Host: www.itcast.cn\r\n  
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: pgv_pvi=1246921728; \r\n
\r\n  (请求头信息后面还有一个单独的’\r\n’不能省略,将留给POST的请求体隔开)

POST请求报文说明:

POST比起GET在最后一个空行后多了一个请求体


---- 请求行 ----
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本
---- 请求头 ----
Host: mail.itcast.cn # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Content-Type: application/x-www-form-urlencoded  # 告诉服务端请求的数据类型
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 客户端的名称
---- 空行 ----
---- 请求体 ----
username=hello&pass=hello # 请求参数

POST请求原始报文说明:

POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1\r\n
Host: mail.itcast.cn\r\n
Connection: keep-alive\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
\r\n(请求头信息后面还有一个单独的’\r\n’不能省略)
username=hello&pass=hello

这四段取自HTTP 请求报文_IT之一小佬的博客-CSDN博客_http请求报文

请求行:第一行,由请求方法,请求路径,协议版本组成

请求头:各个参数的说明,长短连接,cookie等信息

空行:与请求体隔开

请求体:放置关键信息如用户名等

GET由请求行,请求头,空行三部分组成

POST由请求行,请求头,空行,请求体四部分组成,POST可以没有请求体,但很少见

状态码

RFC标准把状态码分成了五类,用数字的第一位表示分类,五类分别为:

  • 1××:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;
  • 2××:成功,报文已经收到并被正确处理;如200
  • 3××:重定向,资源位置发生变动,需要客户端重新发送请求;
  • 4××:客户端错误,请求报文有误,服务器无法处理;如最常见的404未找到
  • 5××:服务器错误,服务器在处理请求时内部发生了错误。

HTTP的特点

  • HTTP是灵活可扩展的,可以任意添加请求头自由的判断,所以遇到一些奇怪的请求头别意外。
  • HTTP是可靠传输,基于TCP/IP协议,当然后面HTTP3.0是基于UDP的我们暂且不谈。
  • HTTP是应用层协议,同FTP,SSH一样,顺带一提TCP,UDP是传输层。
  • HTTP是请求-应答模式,客户端主动发起请求,服务器被动回复。
  • HTTP本质是无状态的,每个请求都是相互独立的,毫无关联的。

HTTP的优点和缺点

  • HTTP最大的优点是简单灵活易扩展,如上述第一个特点。
  • HTTP是明文传输,容易分析但也容易被第三方获取,安全得靠HTTPS
  • HTTP是不安全的,无法验证通信双方的身份,也不能判断报文信息是否被篡改,同上得看HTTPS。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值