HTTP

一. 简述浏览器输入 URL 地址后发生的事情
1.1 描述
浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。
NS 服务器返回网站的 IP 地址。
浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。
浏览器获取请求页面的 HTML 代码。
浏览器在显示窗口内渲染 HTML 。
窗口关闭时,浏览器终止与服务器的连接。

  1. 请介绍常见的 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 协议版本。

  1. 请介绍常见的 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
举例:
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 连接是一个长连接

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

4.1 HTTP Request Method
根据 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 中不可见

相关推荐