【第二天】计算机网络 HTTP请求报文和响应报文是什么样的 HTTP请求方式有哪些 GET请求和POST请求的区别

HTTP请求报文和响应报文是什么样的?

我去,以前都没怎么研究过这个。

客户端发送一个请求给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放到响应报文中返回给客户端。

URL

HTTP使用URL (Uniform Resource Locator,统一资源定位符)来定位资源,它是URI(统一资源标识符)的子集,URL在URI的基础上增加了定位能力。URI除了包括URL外,还包括URN(统一资源名称),URN只是用来定义一个资源的名称,并不具备定位该资源的能力。

请求报文结构:

第一行包含了请求方法,URL,协议版本

接下来多行都是请求首部Header,每个首部都有一个首部名称,以及对应的值。

接下来用一个空行分隔Header和主体内容Body

最后就是请求的内容主体

复制代码
GET http://www.example.com/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Host: www.example.com
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 xxx

param1=1&param2=2

响应报文结构:

第一行包含了协议版本,状态码以及描述,这里的200 OK表示请求成功了。

接下来多行也是首部内容

还是用空行来分隔首部和主体

最后是响应的内容主体

复制代码
HTTP/1.1 200 OK
Age: 529651
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2020 17:53:39 GMT
Etag: "3147526947+ident+gzip"
Expires: Mon, 09 Nov 2020 17:53:39 GMT
Keep-Alive: timeout=4
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Proxy-Connection: keep-alive
Server: ECS (sjc/16DF)
Vary: Accept-Encoding
X-Cache: HIT

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
	// 省略... 
</body>
</html>

HTTP请求的方式有哪些

我去,居然有9中方法。
GET 方法:获取资源。当前网络请求中,绝大部分使用GET方法。
HEAD 方法:获取响应报文的header(首部)。和GET方法类似,但是不返回报文实体主体部分。主要用于确认URL的有效性以及资源更新的日期时间。
POST 方法:传输实体主体。POST方法主要用来传数据,而GET方法主要用来获取资源。
PUT 方法:上传文件。由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
PATCH 方法:对资源部分进行部分修改。PUT也可以用于修改资源,但是只能完全替代原始资源,PATCH允许部分修改。
DELETE 方法:与PUT功能相反,并且同样不带验证机制。
OPTIONS 方法:查询支持的方法。查询指定的URL能够支持的方法,会返回
Allow: GET,POST,HEAD,OPTIONS这样的内容。
CONNECT 方法:在与代理服务通信时建立隧道。使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
TRACE方法:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器就会减1,当数值为0时就会停止传输。但通常不会使用TRACE,英文它容易收到XST攻击(跨站追踪)

GET请求和POST请求的区别

作用:

GET用于请求资源,POST用于传输实体主体。

参数:

GET和POST的请求都可以使用额外的参数。但是GET的参数是以查询字符串的方式出现在URL中,而POST的参数存储在实体主体中。不能因为POST参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(例如Fiddler)查看。

因为URL只支持ASCII码,因此GET的参数中如果存在中文等字符就需要先进性编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参数支持标准字符集。

安全:

安全的HTTP方法不会改变服务器状态,也就是说它是可读的。

GET方法是安全的,而POST却不是,因为POST方法的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

安全的方法有:GET,HEAD,OPTIONS

不安全的方法有:POST,PUT,DELETE,PATCH,TRACE。

幂等性:

幂等的HTTP方法:即同样的请求被执行一次或多次的效果是一样的,服务器的状态也是一样的。也就是说幂等方法不具有副作用。

所以所有的安全方法都是幂等的。

在正确实现的条件下,GET,HEAD,PUT,DELETE等方法都是幂等的,但POST不是。

可缓存:

如果要对响应进行缓存,需要满足以下条件:

  1. 请求报文的HTTP方法本身是可以缓存的,包括GET和HEAD,但是PUT和DELETE不可缓存,POST在多数条件下不可缓存。
  2. 响应报文的状态码是可以缓存的,包括:200,203,204,206,300,301,404,405,410,414,501
  3. 响应报文的Cache-Control首部字段没有指定不进行缓存。

XMLHttpRequest

XMLHttpRequest:

XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过URL来获取数据的方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest在AJAX中被大量使用。

在使用XMLHttpRequest的POST方法时,浏览器会先发送Header再发送Data。但不是所有的浏览器都会这么做。例如火狐就不会。

而GET方法Header和Data会一起发送。

相关推荐
李洛克071 小时前
RDMA CM UDP 通信完整指南
单片机·网络协议·udp
北京耐用通信2 小时前
终结混合网络调试噩梦:耐达讯自动化实现EtherCAT对DeviceNet设备的直接读写
网络·人工智能·物联网·网络协议·自动化·信息与通信
Henry Zhu1233 小时前
VPP中的DPDK插件源码详解第一篇:DPDK插件的作用和意义以及整体架构
运维·服务器·网络·计算机网络·云原生
千天夜3 小时前
文件系统磁盘块分配方式:从隐式链接到索引结构
网络·网络协议
2501_915918413 小时前
HTTPS 端口深度解析,443 并不是唯一入口,理解 TLS 流量行为与抓包策略
网络协议·http·ios·小程序·https·uni-app·iphone
shcoc4 小时前
备用 申请acme 申请ssl
网络·网络协议·ssl
秋刀鱼 ..5 小时前
第三届教育发展与社会科学国际学术会议 (EDSS 2026)
大数据·python·计算机网络·数学建模·制造
YuSun_WK5 小时前
zerotier-cli listpeers/ listnetworks命令以及IP的理解
网络·网络协议·tcp/ip
ogre20206 小时前
http header Authorization: Bearer和token之间可以有几个空格
http
会议秘书白老师7 小时前
2026年物联网、计算机网络与智能计算国际会议(ITCNIC 2026)
物联网·计算机网络