HTTP常见面试题
-
- 1.HTTP有哪些方法?这些方法的具体作⽤是什么?
- 2.GET和POST有什么区别?
- 3.PUT和POST都是给服务器发送新增资源,有什么区别?
- 4.PUT和PATCH都是给服务器发送修改资源,有什么区别?
- 5. 如何理解 URI?
- 5.http的请求报⽂是什么样的?
- 6.http的响应报⽂是什么样的?
- 7.聊⼀聊HTTP的部⾸有哪些?
- 聊⼀聊HTTP的状态码有哪些?
- 005: 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?
- 008: HTTP 如何处理大文件的传输?
- 009: HTTP 中如何处理表单数据的提交?
- HTTP的keep-alive是⼲什么的?
- 7.说说http https的区别,https如何保证安全的?
- HTTP2相对于HTTP1.x有什么优势和特点?
- HTTP的缓存的过程是怎样的?
- 推荐阅读
1.HTTP有哪些方法?这些方法的具体作⽤是什么?
方法
- HTTP1.0定义了三种请求⽅法: GET, POST 和 HEAD⽅法
- HTTP1.1新增了五种请求⽅法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
作用
- GET: 通常⽤于请求服务器发送某些资源
- HEAD: 请求资源的头部信息, 并且这些头部与 HTTP GET ⽅法请求时返回的⼀致。该请求⽅法的⼀个使⽤场景是在下载⼀个⼤⽂件前先获取其⼤⼩再决定是否要下载, 以此可以节约带宽资源
- OPTIONS: ⽤于获取⽬的资源所⽀持的通信选项
- POST: 发送数据给服务器
- PUT: ⽤于新增资源或者使⽤请求中的有效负载替换⽬标资源的表现形式
- DELETE: ⽤于删除指定的资源
- PATCH: ⽤于对资源进⾏部分修改
- CONNECT: HTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器
- TRACE: 回显服务器收到的请求,主要⽤于测试或诊断
2.GET和POST有什么区别?
- 数据传输方式不同:GET请求通过URL传输数据,⽽POST的数据通过请求体传输。
- 安全性不同:POST的数据因为在请求主体内,所以有⼀定的安全性保证,⽽GET的数据在URL中,通过历史记
录,缓存很容易查到数据信息。 - 数据类型不同:GET只允许 ASCII 字符,⽽POST⽆限制
- GET无害: 刷新、后退等浏览器操作GET请求是⽆害的,POST可能重复提交表单
- 特性不同:GET是安全(这⾥的安全是指只读特性,就是使⽤这个⽅法不会引起服务器状态变化)且幂等(幂等的
概念是指同⼀个请求⽅法执⾏多次和仅执⾏⼀次的效果完全相同),⽽POST是⾮安全⾮幂等
或者这样回答
首先最直观的是语义上的区别。
而后又有这样一些具体的差别:
- 从缓存的角度,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
- 从编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
- 从参数的角度,GET 一般放在 URL 中,因此不安全,POST 放在请求体中,更适合传输敏感信息。
- 从幂等性的角度,GET是幂等的,而POST不是。(幂等表示执行相同的操作,结果也是相同的)
- 从TCP的角度,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)
3.PUT和POST都是给服务器发送新增资源,有什么区别?
PUT 和POST⽅法的区别是,
- PUT⽅法是幂等的,⽽POST⽅法是⾮幂等的。幂等连续调⽤⼀次或者多次的效果相同(⽆副作⽤)
- 通常情况下,PUT的URI指向是具体单⼀资源,⽽POST可以指向资源集合。
举个例⼦,我们在开发⼀个博客系统,当我们要创建⼀篇⽂章的时候往往⽤ POSThttps://www.jianshu.com/articles
,这个请求的语义是,在articles的资源集合下创建⼀篇新的⽂章,如果我们多次提交这个请求会创建多个⽂章,这是⾮幂等的。⽽ PUT https://www.jianshu.com/articles/820357430
的语义是更新对应⽂章下的资源(⽐如修改作者名称等),这个URI指向的就是单⼀资源,⽽且是幂等的,⽐如你把『刘德华』修改成『蔡徐坤』,提交多少次都是修改成『蔡徐坤』
ps: 『POST表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性
4.PUT和PATCH都是给服务器发送修改资源,有什么区别?
PUT和PATCH都是更新资源,⽽PATCH⽤来对已知资源进⾏局部更新。
⽐如我们有⼀篇⽂章的地址 https://www.jianshu.com/articles/820357430
,这篇⽂章的可以表示为:
article = {
author: 'dxy',
creationDate: '2019-6-12',
content: '我写⽂章像蔡徐坤',
id: 820357430
}
当我们要修改⽂章的作者时,我们可以直接发送 PUT https://www.jianshu.com/articles/820357430
,这个时候的数据应
该是:
{
author:'蔡徐坤',
creationDate: '2019-6-12',
content: '我写⽂章像蔡徐坤',
id: 820357430
}
这种直接覆盖资源的修改⽅式应该⽤put,但是你觉得每次都带有这么多⽆⽤的信息,那么可以发送 PATCHhttps://www.jianshu.com/articles/820357430
,这个时候只需要:
{
author:'蔡徐坤',
}
5. 如何理解 URI?
URI, 全称为(Uniform Resource Identifier), 也就是统一资源标识符,它的作用很简单,就是区分互联网上不同的资源。
但是,它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分,由于 URL 过于普及,就默认将 URI 视为 URL 了。
URI 的结构
URI 真正最完整的结构是这样的。
可能你会有疑问,好像跟平时见到的不太一样啊!先别急,我们来一一拆解。
scheme 表示协议名,比如http, https, file等等。后面必须和://连在一起。
user:passwd@ 表示登录主机时的用户信息,不过很不安全,不推荐使用,也不常用。
host:port表示主机名和端口。
path表示请求路径,标记资源所在位置。
query表示查询参数,为key=val这种形式,多个键值对之间用&隔开。
fragment表示 URI 所定位的资源内的一个锚点,浏览器可以根据这个锚点跳转到对应的位置。
举个例子:
https: