前端开发的核心技术是什么(web前端核心技术)
655
2022-05-29
Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣!
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 18】!
今天来和小伙伴们分享一下关于HTTP中常见的几种方法以及他们可能被出到的面试题。
一、HTTP头部主要包含哪些信息?
HTTP头部本质上作为一个传递额外重要信息的键值对,主要分为:通用头部、请求头部、响应头部和实体头部。
下面是这四种头部信息中主要包括的内容:
通用头部包括有:
协议头
说明
举例
Cache-Control
用来指定当前的请求/回复中是否使用缓存机制
Cache-Control: no-store
Connection
客户端(浏览器)想要优先使用的连接类型
Connection: keep-alive (Upgrade)
Date
报文创建时间
Date: Dec, 26 Dec 2015 17: 30: 00 GMT
Trailer
会实现说明在报文主体后记录哪些首部字段,该首部字段可以使用在 HTTP/1.1 版本分块传输编码时
Trailer: Expiress
Transfer-Encoding
用来改变报文格式
Transfer-Encoding: chunked
Upgrade
要求服务器升级到一个高版本协议
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via
告诉服务器,这个请求是由哪些代理发出的
Via: 1.0 fred, 1.1 itbilu.com.com (Apache/1.1)
Warning
一个一般性的警告,表示在实体内容中可能存在错误
Warning: 199 Miscellaneous warning
请求头部包括有:
协议头
说明
举例
Accept
告诉服务器自己允许哪些媒体类型
Accept: text/plain
Accept-Charset
浏览器申明可接受的字符集
Accept-Charset: utf-8
Accept-Encoding
浏览器申明自己接收的编码方法
Accept-Encoding: gzip, deflate
Accept-Language
浏览器可接受的响应内容语言列表
Accept-Language: en-US
Authorization
用于表示 HTTP 协议中需要认证资源的认证信息
Authorization: Basic OSdjJGRpbjpvcGVul ANIc2SdDE==
Expect
表示客户端要求服务器做出特定的行为
Expect: 100-continue
From
发起此请求的用户的邮件地址
From: user@itbilu.com
Host
表示服务器的域名以及服务器所监听的端口号
Host: www.itbilu.com:80
If-XXX
条件请求
If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT
Max-Forwards
限制该消息可被代理及网关转发的次数
Max-Forwards: 10
Range
表示请求某个实体的一部分,字节偏移以 0 开始
Range: bytes=500-999
Referer
表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面
Referer: http://itbilu.com/nodejs
User-Agent
浏览器的身份标识字符串
User-Agent: Mozilla/……
响应头部包括有:
协议头
说明
举例
Accept-Ranges
字段的值表示可用于定义范围的单位
Accept-Ranges: bytes
Age
创建响应的时间
Age:5744337
ETag
唯一标识分配的资源
Etag:W/"585cd998-7c0f"
Location
表示重定向后的 URL
Location: http://www.zcmhi.com/archives/94.html
Retry-After
告知客户端多久后再发送请求
Retry-After: 120
Server
告知客户端服务器信息
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Vary
缓存控制
Vary: Origin
实体头部包括有:
协议头
说明
举例
Allow
对某网络资源的有效的请求行为,不允许则返回405
Allow: GET, HEAD
Content-encoding
返回内容的编码方式
Content-Encoding: gzip
Content-Length
返回内容的字节长度
Content-Length: 348
Content-Language
响应体的语言
Content-Language: en,zh
Content-Location
请求资源可替代的备用的另一地址
Content-Location: /index.htm
Content-MD5
返回资源的MD5校验值
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range
在整个返回体中本部分的字节位置
Content-Range: bytes 21010-47021/47022
Content-Type
返回内容的MIME类型
Content-Type: text/html; charset=utf-8
Expires
响应过期的日期和时间
Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified
请求资源的最后修改时间
Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
二、如何知道HTTP的报文长度?
当相应消息中存在content-length的时候,我们可以直接根据这个值来判断数据是否接收完成,例如客户端向服务器请求一个静态页面或者一张图片的时候,服务器能够很清楚的知道请求内容的大小,因此可以通过消息首部字段content-length来告诉客户端需要接收多少的数据。但是如果服务器预先不知道请求内容的大小,例如加载动态页面的时候,就需要使用Transfer-Encoding: chunked 的方式来代替 Content-Length。
分块传输编码(Chunked transfer encoding)是 HTTP/1.1 中引入的一种数据传输机制,其允许 HTTP 由服务器发送给客户端的数据可以分成多个部分,当数据分解成一系列数据块发送时,服务器就可以发送数据而不需要预先知道发送内容的总大小,每一个分块包含十六进制的长度值和数据,最后一个分块长度值为0,表示实体结束,客户机可以以此为标志确认数据已经接收完毕。
三、HTTP方法了解哪些?
HTTP/1.0定义了三种请求方法:GET、POST和HEAD方法
HTTP/1.1增加了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法
所以现在一共有九种HTTP方法,他们的作用分别如下:
方法
描述
GET
请求指定的页面信息,并返回具体内容,通常只用于读取数据。
HEAD
类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立或已有资源的更改。
PUT
替换指定的资源,没有的话就新增。
DELETE
请求服务器删除 URL 标识的资源数据。
CONNECT
将服务器作为代理,让服务器代替用户进行访问。
OPTIONS
向服务器发送该方法,会返回对指定资源所支持的 HTTP 请求方法。
TRACE
回显服务器收到的请求数据,即服务器返回自己收到的数据,主要用于测试和诊断。
PATCH
是对 PUT 方法的补充,用来对已知资源进行局部更新。
四、GET请求和POST请求的区别?
Get提交的数据会被放置在URL之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在URL中,可能存在安全问题,因此往往用于获取资源信息。而post参数放置在请求主体中,并且参数不会被保留。因此相比于get方法,post方法更安全,主要用于修改服务器上的资源。
Get请求只支持URL编码,post请求支持多种编码格式。
Get请求只支持ASCII字符格式的参数,而post请求没有限制。
Get请求提交的数据大小有限制(这里所说的限制是针对浏览器而言的)。而post提交的数据没有限制。
Get方式需要使用Request QueryString来获取变量的值,而post方式通过Request Form来获取
Get方法产生一个tcp数据包,post方法产生两个(并不是所有的浏览器中都产生两个)
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务端响应200,请求成功。
对于POST方式的请求,浏览器会先发送http header给服务端,告诉服务端等一下会有数据过来,服务端响应100 continue,告诉浏览器我已经准备接收数据,浏览器再post发送一个data给服务端,服务端响应200,请求成功。
五、追问:既然GET请求提交的数据大小有限制,那么他的长度限制是多少?
HTTP 中的 GET 方法是通过 URL 传递数据的,而 URL 本身并没有对数据的长度进行限制,真正限制 GET 长度的是浏览器,
例如 IE 浏览器对 URL 的最大限制为 2000多个字符,大概 2KB左右,像 Chrome, FireFox 等浏览器能支持的 URL 字符数更多,其中 FireFox 中 URL 最大长度限制为 65536 个字符,Chrome 浏览器中 URL 最大长度限制为 8182 个字符。
并且这个长度不是只针对数据部分,而是针对整个 URL 而言,在这之中,不同的服务器同样影响 URL 的最大长度限制。因此对于特定的浏览器,GET的长度限制不同。
由于 POST 方法请求参数在请求主体中,理论上讲,post 方法是没有大小限制的,而真正起限制作用的是服务器处理程序的处理能力。
今日总结
今天最主要其实是HTTP协议中的多种方法的使用和理解,我们需要掌握get和post请求的原理、他们的区别、各自的请求方式、适用于什么场景等等。
如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!
我是 灰小猿 ,我们下期见!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。