Http请求 笔记记录
-
HTTP有哪些方法?
-
http1.0标准:get,post,head
-
http1.1标准:put,patch,delete,options,trace,connect
-
-
各个HTTP方法的具体作用是什么?
-
GET:通常用于请求服务器发送的某些资源
-
POST:发送数据给服务器
-
HEAD:请求资源的头部信息
-
PUT:用于全量修改目标资源(看接口,也可以用于添加)
-
DELETE:用于删除指定资源
-
OPTIONS:用于获取目的资源所支持的通信选项
-
TRACE:该方法会让服务器原样返回任意客户端请求的信息,用于诊断和判断
-
CONNECT:
-
PATCH:用于对资源进行部分修改
注意:GET/DELETE参数是在地址栏中传递,PUT/PATCH/POST参数是在请求体中传递
-
-
GET方法和POST方法有何区别?
-
传输方式:get通过URL传输数据(地址栏拼接参数);post通过请求体传输
-
数据安全:get数据暴露在URL中,可通过浏览历史记录、缓存等很容易查到数据信息(后期可加密);post数据因为在请求主体内,所以有一定的安全性保证
-
数据类型:get只允许 ASCII 字符(有最大限制字符); post无限制
-
GET无害:get无害 刷新、后退等浏览器操作是无害的;post:可能会引起重复提交表单
-
功能特性:get安全且幂等(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态功能特性变化。(幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同);post非安全(会引起服务器端的变化)、非幂等
-
-
HTTP请求报文是什么样的?
-
请求行:包含请求方法、URL、http协议版本、
-
请求头:请求头由键值对组成,每行一对,’;‘分割
请求头 Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Access-Control-Request-Headers: content-type Access-Control-Request-Method: POST Connection: keep-alive Host: ug.baidu.com Origin: https://www.baidu.com
-
请求体:请求体中放置post,put等请求方法中需要携带的数据
-
-
HTTP响应报文是什么样的?
-
响应行:由协议版本,状态码,状态码原因组成
-
响应头:键值对的格式,如
accept-ranges: bytes age: 1732 content-length: 66477 content-md5: 2MfmcV88MFszLqo4Lv5G2Q== content-type: image/jpeg
-
响应体:服务器发送过来的数据
-
-
你了解的HTTP状态码有哪些?
-
常用状态码总结
-
1XX : 消息,这一类型的状态码,代表请求已被接受,需要继续处理。但是一般服务器禁止向客户端发送此类状态码
-
2XX : 成功,这一类型的状态码,代表请求已成功被服务器接收、理解、并接受
-
3XX : 重定向,这类状态码代表需要客户端采取进一步的操作才能完成请求
-
4XX : 请求错误,这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理
-
5XX : 服务器错误,这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理
-
-
常见状态码:
-
200 : 成功,表示访问成功,正常状态
-
301 : 永久移动,表示本网页已经永久性的移动到一个新的地址,在客户端自动将请求地址改为服务器返回的新地址
-
302 : 临时重定向,表示网页暂时性的转移到一的新的地址,客户端在以后可以继续向本地址发起请求
-
303 : 表示必须临时重定向,并且必须使用GET方式请求
-
304 : 重定向至浏览器本身,当浏览器多次发起同一请求,且内容未更改时,使用浏览器缓存,这样可以减少网络开销
-
401 : 表示协议格式出错,可能是此IP地址被禁止访问该资源,与403类似
-
403 : 表示没有权限,服务器拒绝访问请求
-
404 : 这是最常见的错误,表示找不到系统资源,但是只是暂时性地
-
500 : 表示服务器程序错误,一个通用的错误信息
-
503 : 表示服务器繁忙,或者服务器负载,通常这只是一个临时状态。
-
-
-
HTTP1.x的keep-alive是什么作用?
-
作用:使客户端到服务器端的连接持续有效(长连接),当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
早期HTTP/1.0在每次请求的时候,都要创建一个新的连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗、缩短响应时间,就需要复用已有连接。
后来的HTTP/1.0以及HTTP/1.1 中引入了复用连接的机制,也就是在请求头中加入Connection: keep-alive,以此告诉对方这个请求响应完成后不要关闭连接,下一次还用这个请求的连接进行后续交流。
协议规定,如果想要保持连接,则需要在请求头中加上Connection: keep-alive。
-
keep-alive 的优点:
-
减少的 CPU 和内存的占用(因为要打开的连接数变少了,复用了连接)
-
减少了后续请求的延迟(无需再进行握手)
-
缺点:因为在处理暂停期间,本来可以释放的资源仍旧被占用。请求已经都结束了,但是还一直连接着也不合适解决: Keep-Alive: timeout=5, max=100timeout:过期时间5秒(对应httpd.conf里的参数是: KeepAliveTimeout)max是最多一百次请求,强制断掉连接。就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。
-
-
keep-alive 的缺点:
-
在处理暂停期间,本来可以释放的资源仍旧被占用。
-
解决:Keep-Alive: timeout=5, max=100timeout。
-
timeout: 过期时间5秒(对应httpd.conf里的参数是: KeepAliveTimeout)
-
max是最多一百次请求,强制断掉连接。
-
-
-
-
为什么需要HTTPS?
-
https在数据加密的过程中会对数据进行加密处理,保证数据的安全性
-
常见的加密算法:对称加密算法,非对称加密算法,hash算法
-
-
http缓存控制
-
Web 服务缓存分类:数据库缓存、服务器端缓存(代理服务器缓存、CDN 服务器缓存)、浏览器缓存。
-
浏览器缓存 也包含很多内容: HTTP 缓存、indexDB、cookie、localstorage 等等。
-
http缓存:优化页面加载的效率,如果没有缓存策略,每次重新加载页面,会非常慢。
-
强缓存:
-
expires:请求头提供展示服务端过期具体时间
-
cache-control:相对时间,超过这个时间就过期了
-
注意:如果命中了强缓存,在有有效期内,使用了本地浏览器的缓存,该资源是不会向服务器发送请求的。
-
-
协商缓存:协商缓存主要由 etag和last-Modified两个字段来实现
-
etag:是一个用于映射 web 资源的映射 token,这个 token 应该满足唯一对应到一 个web服务器上的静态资源(具体实现通常是提取文件相关信息进行hash和base64编码等操作)
-
last-Modified:则通常是文件最后更新的日期时间戳
-
-
工作中两者并存
-
-