HTTP是什么
超文本传输协议(hypertext transfer protocol,HTTP),它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。浏览器连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。(比如咱们用的QQ,迅雷,都是是这个协议)
1.那么HTTP如何工作呢?
当我们客户端点击一个URL地址的时候,会给浏览器一个请求,根据请求,服务器会给一个响应,如果不出错的话。就会把浏览器所给的信息在客户端上进行显示出来。如果错误的话就会把错误的信息,在客户端上显示出来。
在请求的时候:请求结构有三部分组成 请求行 消息报头 请求正文
同样,在响应的时候也是有三部分组成 状态行 消息报头 状态正文
2.HTTP协议中有哪些请求方式?
- GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
- POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
- PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
- HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
- DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
- OPTIONS:查询相应URI支持的HTTP方法。
3.HTTP协议有什么组成?
请求报文包含三部分:
- 请求行:包含请求方法、URI、HTTP版本信息
- 请求首部字段
- 请求内容实体
响应报文包含三部分:
- 状态行:包含HTTP版本、状态码、状态码的原因短语
- 响应首部字段
- 响应内容实体
4.请介绍常见的 HTTP 头部(至少五个)
4.1HTTP 头部
首部字段名 | 说明 |
---|---|
Accept | 告诉服务器,客户端支持的数据类型。 |
Accept-Charset | 告诉服务器,客户端采用的编码。 |
Accept-Encoding | 告诉服务器,客户机支持的数据压缩格式。 |
Accept-Language | 告诉服务器,客户机的语言环境。 |
Host | 客户机通过这个头告诉服务器,想访问的主机名。 |
If-Modified-Since | 客户机通过这个头告诉服务器,资源的缓存时间。 |
Referer | 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链) |
User-Agent | 客户机通过这个头告诉服务器,客户机的软件环境。 |
Cookie | 客户机通过这个头告诉服务器,可以向服务器带数据。 |
Date | 客户机通过这个头告诉服务器,客户机当前请求时间 |
Location | 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 |
etag: | 一般比较其内容的摘要,接收到 etag 后,同一个 url 第二次请求就会自动带上 “If-None-Match” |
4.2 Request Header
4.3 Request Header
5.请列举常用的 HTTP 方法,并介绍 GET 与 POST 请求之间的区别
序号 | 方法 | 描述 |
---|---|---|
1 | get | 请求指定的页面信息,并返回实体主体 |
2 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
3 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
4 | DELETE | 请求服务器删除指定的页面。 |
5 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
6 | OPTIONS | 允许客户端查看服务器的性能。 |
7 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
GET 与 POST 请求之间的区别:
数据传输方式不同:GET请求通过URL传输数据,而POST的数据通过请求体传输。
安全性不同:POST的数据因为在请求主体内,所以有一定的安全性保证,而GET的数据在URL中,通过历史记录,缓存很容易查到数据信息。
数据类型不同:GET只允许 ASCII 字符,而POST无限制
GET无害: 刷新、后退等浏览器操作GET请求是无害的,POST可能重复提交表单
特性不同:GET是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等(幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同),而POST是非安全非幂等
6. 请介绍常见的 HTTP 状态码(至少五个)
状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理。
100 客户必须继续发出请求
101 客户要求服务器根据请求转换HTTP协议版本
2xx:成功–表示请求已被成功接收、理解、接受。
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
3xx:重定向–要完成请求必须进行更进一步的操作。
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
7. 代理
参考链接:https://juejin.im/post/5d0de954e51d4556be5b3a6
https://juejin.im/post/5d032b77e51d45777a126183#heading-2
https://juejin.im/post/5cd0438c6fb9a031ec6d3ab2#heading-15