请求行(方法,URL,版本号)
方法:
描述了这次请求的目的。
常见方法:
GET:从服务器拿一个东西过来(读操作)
POST:往服务器放一个东西去(写操作)
两个典型的使用POST的场景:1.登录 2.上传
从使用习惯上,GET通常没有body,POST通常有body,
GET会把需要给服务器补充的信息放到query string中(url)
POST会把这些信息放到body中,body中可以放任意格式的数据,前后端约定好即可(json是非常常用的格式)
GET与POST的区别
首先,GET与POST本质上没有区别。
使用POST的场景可以替换成GET,反之亦然 => 取决于代码的写法,尤其是服务器和客户端都是自己实现的场景。但是部分浏览器/服务器某些情况下GET和POST不能完美替换,大部分情况下相互替换问题不大。
但是GET和POST在使用情况下还是有区别的:
1.GET习惯于把数据放在url的query string中,POST习惯于放在body中。
GET可以把数据放在body中 => 有的浏览器/服务器不支持。
POST也可放在query string中 => 对于绝大多数浏览器/服务器都适用。
2.语义上的区别,标准文档中,GET的语义用来获取数据,POST的语义是用来提交数据。
实际应用中并不一定按照上述要求。
3.关于幂等性,标准文档中,建议GET请求实现成幂等的,POST则无要求。
每次输入的内容一定,输出的结果也一定,称为幂等。
每次输入的内容一定,输出的结果不一定,不是幂等。
如果一个操作本身是幂等的,此时就可以进行缓存了
4.GET请求可以被浏览器收藏,POST不可以。
其他方法:
1.PUT与POST相似,只是具有幂等性,一般用于更新。
2.DELETE删除服务器指定资源
3.OPTIONS返回服务器所支持的请求方法。
4.HEAD类似于GET,只不过响应体不返回,只返回响应头。
5.TRACE回显服务器收到的请求,测试的时候会用到。
6.CONNECT预留,暂无使用。
URL
用于描述一个网络上的资源位置。
一个完整的URL结构:
协议方案名+登录信息(认证)+服务器地址+服务器端口+带有层次的文件地址+查询字符串+片段标识符
登录信息(认证):写在这里不太安全,现在都是通过单独的登录页面来完成身份验证的。
服务器地址+服务器端口:这里的域名也可以是ip地址,后面带有端口号,浏览器就会自动给一个默认的端口。http:80; https:443.
带有层次的文件地址:这里可能会对应一个真实的硬盘文件,也可能对应一个虚拟的文件。
网络上的资源位置:1)通过ip地址知道服务器在哪
2)通过端口号知道程序是哪个
3)通过路径知道是访问哪个资源
查询字符串:是客户端给服务器传递信息的重要途径,按照键值对的方式来组织的。针对请求的内容做的补充说明。
片段标识符:用来标识当前页面的某个部分,通过不同的片段标识可以完成网页内跳转。