http 请求的7 种方法
1.get
2.post
3.put
4.delete
5.head
6.trace
7.opinions
head 请求和 get请求类似,但是服务器只响应首部,不会返回主体部分。
1. 看资源是否存在
2. 看首部,context-length是否被修改了。
- //get请求报文
- GET /test/index.html HTTP/1.1
- Host: www.dudu.com
- Accept:*
- //get 响应报文
- Http/1.2 200 ok
- Content-type:text/html;
- Content-Length:617;
- <html>
- <div>
- // head请求报文
- Head /test/index.html HTTP/1.1
- Host: www.dudu.com
- Accept:*
- //head 响应报文
- Http/1.2 200 ok
- Content-type:text/html;
- Content-Length:617;
put和get 相反,会向服务器写入文档,服务器用请求主体部分创造一个新的文档,url就是put 请求的url; 如果资源已经存在,则更新资源
- // put 请求报文
- Put /test/put.txt HTTP/1.1
- Host:www.dudu.com
- Content-type: text/plain;
- Content-length: 34
- 'hahah'
- // put响应报文
- Http/1.1 201 created
- location:www.dudu.com/test/put.txt
- Content-type: text/plain;
- Content-length: 34
- www.dudu.com/test/put.txt
post
get / post 有哪些区别?
GET和POST本质上就是TCP链接,本质上都一样。
get | ||
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。大概是2kb, 会出现截断的情况 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
(安全后退书签缓存编码历史两个限制)
GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器直接忽略
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
trace
『儿子你都变成啥样了』
客户端发起的请求要经过防火墙,代理等程序,任何一个程序都有可能修改请求。
trace 请求,服务器会把它收到的原始请求报文转发回去;
opinions
『你能干啥』
请求服务器告知其功能,可以问服务器支持哪些方法,可以对某些特定的资源支持哪些方法
delete
请求删除某一资源,不能保证一定会删除