概念
超文本
超文本(hypertext)是一种含有特殊标记的文本文件,比如表示网页的HTML源代码、表示图片的二进制数据。
URI、URL和URN
- URI即统一资源标志符(Uniform Resource Identifier),用于标识某一互联网资源名称的字符串1。
- URL即统一资源定位系统(Uniform Resource Locator),用于指定信息位置的表示方法2。
- URN——已过时3。
URL和URN组成URI,URL和URN是并集,关系图4:
URL格式
示例:https://www.baidu.com/s?wd=HTTP
标准格式:
[协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
完整格式:
[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
协议类型
URL协议类型最常见的有http或https,其它诸如ftp、sftp、smb等协议。
- HTTP既超文本传输协议(Hyper Text Transfer Protocol),用于从网络传输超文本数据到本地浏览器的传送协议。
- HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
- HTTP的端口号为80。
- HTTPS是以安全为目标的HTTP通道。
- HTTPS在HTTP的基础下加入SSL,提供了身份验证与加密通讯方法。
- HTTPS的端口号为443。
HTTP请求过程
简单来说,请求过程就是客户端向服务器进行request请求,服务器收到后进行处理然后response响应数据给浏览器,就完成了一次请求:
详细过程
详细过程能为工作中解决一些问题提供参考,面试时回答简单过程即可。详细过程不需要死记硬背,把它当成API类的存在即可。
当单击某个超链接或者输入访问地址访问时,HTTP的工作开始:
- 触发。如用户点击某个超链接,软件启动时发送的请求,用户在地址栏访问网址等等。
- 解析。浏览器解析URL,得到协议类型、域名或服务器地址、资源地址。
- DNS查询。浏览器依次检查缓存与Hosts文件,如果没有,则向DNS服务器请求目标服务器的IP地址。
- 握手。浏览器向服务器发起TCP的连接请求,TCP经过3次握手以后建立连接。
- 请求。建立连接后,浏览器发送一个HTTP请求给服务器。
- 响应。服务器处理完后响应HTTP,返回数据给html。
请求Request
请求行
请求行由请求方法、请求地址URL和HTTP协议版本组成,用空格分割。
- 请求地址就是URL。
- 协议版本的格式为:HTTP/主版本号.次版本号。常用的有HTTP/1.0和HTTP/1.1。
请求方法
方法 | 描述 | 备注 |
---|---|---|
GET | 请求指定的页面信息,并返回实体主体。 | 常见 |
POST | 向指定资源提交数据进行处理请求。数据被包含在请求体中(例如提交表单或者上传文件) | 常见 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 | 一般 |
DELETE | 请求服务器删除指定的页面。 | 一般 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 | 罕见 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 | 罕见 |
OPTIONS | 允许客户端查看服务器的性能。 | 罕见 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 | 罕见 |
PATCH | 是对PUT方法的补充,用来对已知资源进行局部更新 。 | 罕见 |
请求头
名称 | 描述 | 示例 |
---|---|---|
Accept | 指定客户端可接受哪些类型的信息。 | application/json,*/* |
Accept-Language | 指定客户端可接受的语言类型。 | zh-CN |
Accept-Encoding | 指定客户端可接受的内容编码。 | gzip, deflate, br |
Host | 用于指定请求资源的主机IP和端口号 | – |
Cookie | 网站为了辨别用户进行会话跟踪而存储在用户本地的数据。 | – |
Referer | 用来标识这个请求是从哪个页面发过来的。如作来源统计、防盗链处理等 | – |
User-Agent | 使服务器识别客户使用的操作系统及版本、浏览器及版本等信息 | Mozilla/5.0… |
Content-Type | 联网媒体类型(Internet Media Type)或者MIME类型 | text/plain;charset=UTF-8 |
表格来源5
请求体
请求体是POST请求中的表单数据,而对于GET请求,请求体则为空。
Content-Type | 提交数据的方式 |
---|---|
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化JSON数据 |
text/xml | XML数据 |
响应Response
可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。
响应状态码
如200代表服务器正常响应,404代表页面未找到,500代表服务器内部发生错误。
响应头
名称 | 描述 | 示例 |
---|---|---|
Date | 响应产生的时间。 | Mon, 08 Mar 2021 11:11:05 GMT |
Last-Modified | 指定资源的最后修改时间。 | Mon, 08 Mar 2021 09:51:35 GMT |
Content-Encoding | 指定响应内容的编码。 | gzip |
Server | 包含服务器的信息,比如名称、版本号等。 | openresty |
Content-Type | 文档类型,指定返回的数据类型是什么 | text/html,application/x-javascript |
Set-Cookie | 设置Cookies | – |
Expires | 指定响应的过期时间 | – |
响应体
请求网页时,响应体是HTML网页。
请求接口时,响应体可能是Json数据。
Q&A
常规问题:
- 请简述HTTP原理
- 常见的协议类型有哪些
- 请简述HTTP和HTTPS,并说明它们的区别
- 常见的请求方法有哪些
细节了解:
- 请求,也就是Request大概有些什么数据
- 响应,也就是Response大概有些什么数据
- 在你的记忆中请求头有哪些东西
- 请简述请求体是什么
- 在你的记忆中响应头有哪些东西
- 请简述响应体是什么
请简述HTTP原理
HTTP就是客户端向服务器发送请求,服务器向客户端发送响应数据的一个过程。它包含了请求Request和响应Respouse,请求Request包含了请求头和请求体;请求头比较常用的属性是User-Agent
和Content-Type
,请求体是POST请求中的表单数据,而对于GET请求,请求体则为空。响应Respouse也包含了响应头和响应体,比较常见的是Content-Type
和Set-Cookie
。
请简述HTTP和HTTPS,并说明它们的区别
HTTP既是超文本传输协议,用于从网络传输超文本数据到本地浏览器的协议。HTTPS是以安全为目标的HTTP通道,在其基础上加入了证书机制进行加密。区别在于,一个有证书加密一个没有证书,在安全上具有差异;端口上1也不同,HTTP是80端口,HTTP是443端口。