HTTP 的15个常见知识点复习 上

本文涉及的产品
.cn 域名,1个 12个月
简介: HTTP 的15个常见知识点复习 上


前言

自从入职新公司到现在,我们前端团队内部一直在做 📖每周一练 的知识复习计划,我之前整理了一个 每周一练 之 数据结构与算法 学习内容,大家也快去看看~~

最近三周,主要复习 网络基础 相关的知识,今天我把这三周复习的知识和参考答案,整理成本文,欢迎各位朋友互相学习和指点,觉得本文不错,也欢迎点赞哈💕💕。

特别喜欢现在的每周学习和分享,哈哈哈~~😄

📅推荐一个 github 仓库 —— 《awesome-http》,内容挺棒的。

注:本文整理资料来源网络,有些图片/段落找不到原文出处,如有侵权,联系删除。


一. 简述浏览器输入 URL 地址后发生的事情

1.1 描述

  1. 浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。
  2. NS 服务器返回网站的 IP 地址。
  3. 浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。
  4. 浏览器获取请求页面的 HTML 代码。
  5. 浏览器在显示窗口内渲染 HTML 。
  6. 窗口关闭时,浏览器终止与服务器的连接。

1.2 TCP 知识点补充

参考文章:《TCP三次握手和四次挥手协议》

建立 TCP 需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:

TCP三次握手

所谓的三次握手,是指建立一个 TCP 连接时,需要客户端和服务器端总共发送三个包,三次握手的目的是连接服务器的指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息,在 SOCKET 编程中,客户端执行 connect() 时,将会触发三次握手:

TCP四次挥手:

TCP连接的拆除需要发送四个包,客户端或者服务器端均可主动发起挥手动作,在SOCKET编程中,任何一方执行close()即可产生挥手操作。


2. 请介绍常见的 HTTP 状态码(至少五个)

状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息–表示请求已接收,继续处理。

  • 100 客户必须继续发出请求
  • 101 客户要求服务器根据请求转换HTTP协议版本

2xx:成功–表示请求已被成功接收、理解、接受。

  • 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
  • 201 (已创建) 请求成功并且服务器创建了新的资源。
  • 202 (已接受) 服务器已接受请求,但尚未处理。

3xx:重定向–要完成请求必须进行更进一步的操作。

  • 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
  • 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
  • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx:客户端错误–请求有语法错误或请求无法实现。

  • 400 (错误请求) 服务器不理解请求的语法。
  • 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
  • 403 (禁止) 服务器拒绝请求。

5xx:服务器端错误–服务器未能实现合法的请求。

  • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
  • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
  • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  • 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。


3. 请介绍常见的 HTTP 头部(至少五个)

3.1 HTTP 头部

更多完整内容,可以查看 《HTTP响应头和请求头信息对照表》

首部字段名 说明
Accept 告诉服务器,客户端支持的数据类型。
Accept-Charset 告诉服务器,客户端采用的编码。
Accept-Encoding 告诉服务器,客户机支持的数据压缩格式。
Accept-Language 告诉服务器,客户机的语言环境。
Host 客户机通过这个头告诉服务器,想访问的主机名。
If-Modified-Since 客户机通过这个头告诉服务器,资源的缓存时间。
Referer 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
User-Agent 客户机通过这个头告诉服务器,客户机的软件环境。
Cookie 客户机通过这个头告诉服务器,可以向服务器带数据。
Connection 客户机通过这个头告诉服务器,请求完后是关闭还是保持链接。
Date 客户机通过这个头告诉服务器,客户机当前请求时间

3.2 Request Header

参考文章:《HTTP常用头部信息》

举例:

Request Header 描述
GET /sample.Jsp HTTP/1.1 请求行
Host: www.uuid.online/ 请求的目标域名和端口号
Origin: http://localhost:8081/ 请求的来源域名和端口号 (跨域请求时,浏览器会自动带上这个头信息)
Referer: https:/localhost:8081/link?query=xxxxx 请求资源的完整URI
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 浏览器信息
Cookie: BAIDUID=FA89F036:FG=1; BD_HOME=1; sugstore=0 当前域名下的Cookie
Accept: text/html,image/apng 代表客户端希望接受的数据类型是html或者是png图片类型
Accept-Encoding: gzip, deflate 代表客户端能支持 gzip 和 deflate 格式的压缩
Accept-Language: zh-CN,zh;q=0.9 代表客户端可以支持语言 zh-CN 或者 zh (值得一提的是q(0~1)是优先级权重的意思,不写默认为1,这里 zh-CN 是1, zh 是0.9)
Connection: keep-alive 告诉服务器,客户端需要的 tcp 连接是一个长连接

3.3 Response Header

参考文章:《HTTP常用头部信息》

举例:

Response Header 描述
HTTP/1.1 200 OK 响应状态行
Date: Mon, 30 Jul 2018 02:50:55 GMT 服务端发送资源时的服务器时间
Expires: Wed, 31 Dec 1969 23:59:59 GMT 较过时的一种验证缓存的方式,与浏览器(客户端)的时间比较,超过这个时间就不用缓存(不和服务器进行验证),适合版本比较稳定的网页
Cache-Control: no-cache 现在最多使用的控制缓存的方式,会和服务器进行缓存验
etag: "fb8ba2f80b1d324bb997cbe188f28187-ssl-df" 一般是Nginx静态服务器发来的静态文件签名,浏览在没有 “Disabled cache” 情况下,接收到 etag 后,同一个 url 第二次请求就会自动带上 “If-None-Match”
Last-Modified: Fri, 27 Jul 2018 11:04:55 GMT 服务器发来的当前资源最后一次修改的时间,下次请求时,如果服务器上当前资源的修改时间大于这个时间,就返回新的资源内容
Content-Type: text/html; charset=utf-8 如果返回是流式的数据,我们就必须告诉浏览器这个头,不然浏览器会下载这个页面,同时告诉浏览器是utf8编码,否则可能出现乱码
Content-Encoding: gzip 告诉客户端,应该采用gzip对资源进行解码
Connection: keep-alive 告诉客户端服务器的tcp连接也是一个长连接


4. 请列举常用的 HTTP 方法,并介绍 GET 与 POST 请求之间的区别

4.1 HTTP Request Method

参考文章:《HTTP请求方法对照表》

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP/1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10 MOVE 请求服务器将指定的页面移至另一个网络地址。
11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。
12 LINK 请求服务器建立链接关系。
13 UNLINK 断开链接关系。
14 WRAPPED 允许客户端发送经过封装的请求。
15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。

4.2 GET 与 POST 请求之间的区别

区别内容 GET POST
点击返回/刷新按钮 没有影响 数据会重新发送(浏览器将会提示“数据被重新提交”)
添加书签 可以 不可以
缓存 可以 不可以
编码类型(Encoding type) application/x-www-form-rulencoded application/x-www-form-rulencoded or multipart/form-data 请为二进制数据使用 multipart 编码
历史记录 没有
长度限制 没有
数据类型限制 只允许 ASCLll 字符类型 没有限制,允许二进制数据
安全性 查询字符串会显示在地址栏的 URL 上,不安全,请不要使用 GET 请求提交敏感数据 因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以 POST 请求比 GET 请求安全,但也不是最安全的方式,如需要传送敏感数据,请使用数据加密
可见性 查询字符串在地址栏的 URL 中可见 查询字符串在地址栏的 URL 中不可见


5. 请分别介绍 Cookie 和 Session 的作用及它们之间的区别

参考文章: 《3分钟搞懂Cookie与Session》

5.1 Cookie简单介绍

Cookie是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过HTTP协议,将他们本地的Cookie内容也发到咱们服务器上,从而完成验证。

  • Cookie 是存储在浏览器客户的一小片数据;
  • Cookie 可以同时被前台与后台操作;
  • Cookie 可以跨页面存取;
  • Cookie 是不可以跨服务器访问的;
  • Cookie 有限制; 每个浏览器存储的个数不能超过300个,每个服务器不能超过20个,数据量不能超过4K;
  • Cookie 是有生命周期的,默认与浏览器相同,如果进程退出,cookie会被销毁

5.2 Session

Session 存储在我们的服务器上,就是在我们的服务器上保存用户的操作信息。

当用户访问我们的网站时,我们的服务器会成一个 Session ID,然后把 Session ID 存储起来,再把这个 Session ID发给我们的用户,用户再次访问我们的服务器的时候,拿着这个 Session ID就能验证了,当这个ID能与我们服务器上存储的ID对应起来时,我们就可以认为是自己人。

  • seesion 数据存储在服务器端;
  • 每一个会话分配一个单独的 session_id;
  • session_id 通过 cookie 传送到前台,默认的 session_id 名称是PHPSESSIONID;
  • 前台只能看到 SessionID,而不能修改 Session 值;
  • 使用 Session之前需要先开启会话;
  • Session存储在 Session数组 $_SESSION;
  • Session存储方式比较安全,但是如果 Session数量过多,会导致服务器性能下降;

5.3 两者区别

Cookie session
定义 浏览器保存用户信息的文件,存储的数量和字符数都有限制 服务器把sessionID 和用户信息、用户操作,记录在服务器上,这些记录就称为session
相同点 都是为了存储用户相关的信息
存储 客户端 服务器
安全性 安全性不高,任何人都能直接查看 安全性高

5.4 两者结合使用

  • 存储在服务端:通过 cookie存储一个 session_id,然后具体的数据则是保存在 session中。如果用户已经登录,则服务器会在 cookie中保存一个 session_id,下次再次请求的时候,会把该 session_id携带上来,服务器根据 session_idsession库中获取用户的 session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做 server side session
  • session数据加密,然后存储在 cookie中。这种专业术语叫做 client side session


6. 请介绍 HTTP 请求报文与响应报文格式

6.1 请求报文

请求报文由请求行请求头部请求正文组成:

  • 请求行

格式为:

请求方法 + 空格 + URL + 空格 + 协议版本 + 回车符 + 换行符

例如:

GET www.baidu.com HTTP/1.1  

常见的请求方法有:GET,HEAD,PUT,POST,TRACE,OPTIONS,DELETE以及扩展方法。

  • 请求头部

格式为:

头部字段名 + 冒号(:) + 值 + 回车符 + 换行符

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。

并且,在请求头部的最后会有一个空行,表示请求头部结束,这一行必不可少。

典型的请求头部有:

请求头部 说明
Host 接受请求的服务器地址,可以是IP:端口号,也可以是域名
User-Agent 发送请求的应用程序名称
Connection 指定与连接相关的属性,如Connection:Keep-Alive
Accept-Charset 通知服务端可以发送的编码格式
Accept-Encoding 通知服务端可以发送的数据压缩格式
Accept-Language 通知服务端可以发送的语言
  • 请求正文

一般使用在 POST 方法中, GET 方法不存在请求正文。

POST 方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是 Content-TypeContent-Length

6.2 响应报文

响应报文由状态行响应头部响应正文组成:

  • 状态行

格式为:

协议版本 + 空格 + 状态码 + 空格 + 状态码描述 + 回车符 + 换行符

状态码划分:

100〜199的状态码是 HTTP / 1.1 向协议中引入了信息性状态码

200〜299的状态码表示成功

300〜399的状态码指资源重定向

400〜499的状态码指客户端请求出错

500〜599的状态码指服务端出错

常见的状态码:

状态码 说明
200 响应成功
302 跳转,跳转地址通过响应头中的位置属性指定(JSP中Forward和Redirect之间的区别)
400 客户端请求有语法错误,不能被服务器识别
403 服务器接收到请求,但是拒绝提供服务(认证失败)
404 请求资源不存在
500 服务器内部错误
  • 响应头部

格式为:

头部字段名 + 冒号(:) + 值 + 回车符 + 换行符
复制代码

常见响应头部:

响应头部 说明
Server 服务器应用程序软件的名称和版本
Content-Type 响应正文的类型(是图片还是二进制字符串)
Content-Length 响应正文长度
Content-Charset 响应正文使用的编码
Content-Encoding 响应正文使用的数据压缩格式
Content-Language 响应正文使用的语言



目录
相关文章
|
缓存 网络协议 前端开发
【前端面试知识点】- 1. http&https
http: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
【前端面试知识点】- 1. http&https
|
6月前
|
存储 安全 API
掌握 HTTP Authorization 头:关键知识点解析
在当今的互联网世界中,安全性贯穿于 web 应用的每个方面,HTTP Authorization 头的使用在这个过程中扮演着不可或缺的角色。它是 HTTP 请求中的一个重要部分,用来在客户端和服务器之间安全地传输认证信息。用途广泛,无论是浏览器还是其他客户端应用,都依赖它来验证用户的访问权限。本文旨在详细解读 HTTP Authorization 头的定义、使用方式以及不同的认证机制。
|
6月前
|
前端开发 JavaScript API
HTTP报文:知识点
HTTP报文:知识点
51 0
|
6月前
|
存储 XML JavaScript
必备指南:掌握这些知识点,轻松应对面试官问的HTTP请求相关面试题!
必备指南:掌握这些知识点,轻松应对面试官问的HTTP请求相关面试题!
|
网络协议 安全 数据安全/隐私保护
http相关知识点
http相关知识点
117 0
http相关知识点
|
缓存 前端开发 JavaScript
HTTP协议基础知识点
HTTP协议 1、什么是HTTP协议 什么是协议 ​ 协议是指双方或多方相互约定好的,大家都要遵守的规则
|
Web App开发 缓存 前端开发
JavaScript扩展知识点 01、前后端交互与HTTP协议
JavaScript扩展知识点 01、前后端交互与HTTP协议
JavaScript扩展知识点 01、前后端交互与HTTP协议
|
缓存 算法 网络协议
HTTP 的15个常见知识点复习 下
HTTP 的15个常见知识点复习 下
126 0
|
Web App开发 缓存 网络协议
Javaweb重要知识点总结(二)Http 协议
Javaweb重要知识点总结(二)Http 协议