HTTP协议

1、什么是http协议?

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。

2、HTTP通信过程

当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信的协议就是HTTP协议。

我们可以把这个过程类比成一个电话对话的过程。当我们要打电话给某个人,首先要知道对方的电话号码,然后进行拨号。打通电话后我们会进行对话,当然要对话肯定需要共同的语言,如果一个人说国语,而另一个人说英语,那肯定不能进行沟通的。在本例中,电话号码相当于上面的IP地址,而共同语言相当于HTTP协议。

我们通过一个简单的图来阐述这个过程:

在这里插入图片描述
浏览器访问URL过程

  1. 首先在浏览器中输入url
  2. 查找缓存:浏览器先查看浏览器缓存中-系统缓存-路由器缓存中是否有该地址页面,如果有则显示页面内容。如果没有则进行下一步。
    ● 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
    ● 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统, 获取操作系统的记录(保存最近的DNS查询缓存);
    ● 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
    ● ISP缓存:若上述均失败,继续向ISP搜索。
  3. DNS域名解析:浏览器向DNS服务器发起请求,解析该url中的域名对应的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议;
  4. 建立TCP连接:解析出IP地址后,根据IP地址和默认80端口,和服务器建立TCP连接
  5. 发起HTTP请求:浏览器发起读取文件的HTTP请求,该请求报文作为TCP三次握手的第三次数据发送给服务器
  6. 服务器响应请求并返回结果:服务器对浏览器请求做出响应,并把对应的html文件发送给浏览器
  7. 关闭TCP连接:通过四次挥手释放TCP连接
  8. 浏览器渲染:客户端(浏览器)解析HTML内容并渲染出来,浏览器接收到数据包后的解析流程为:
    ● 构建DOM树:词法分析然后解析成DOM树(dom tree),是由dom元素及属性节点组成,树的根是document对象
    ● 构建CSS规则树:生成CSS规则树(CSS Rule Tree)
    ● 构建render树:Web浏览器将DOM和CSSOM结合,并构建出渲染树(render tree)
    ● 布局(Layout):计算出每个节点在屏幕中的位置
    ● 绘制(Painting):即遍历render树,并使用UI后端层绘制每个节点。
  9. JS引擎解析过程:调用JS引擎执行JS代码(JS的解释阶段,预处理阶段,执行阶段生成执行上下文,VO,作用域链、回收机制等等)
    ● 创建window对象:window对象也叫全局执行环境,当页面产生时就被创建,所有的全局变量和函数都属于window的属性和方法,而DOM Tree也会映射在window的doucment对象上。当关闭网页或者关闭浏览器时,全局执行环境会被销毁。
    ● 加载文件:完成js引擎分析它的语法与词法是否合法,如果合法进入预编译
    ● 预编译:在预编译的过程中,浏览器会寻找全局变量声明,把它作为window的属性加入到window对象中,并给变量赋值为’undefined’;寻找全局函数声明,把它作为window的方法加入到window对象中,并将函数体赋值给他(匿名函数是不参与预编译的,因为它是变量)。而变量提升作为不合理的地方在ES6中已经解决了,函数提升还存在。
    ● 解释执行:执行到变量就赋值,如果变量没有被定义,也就没有被预编译直接赋值,在ES5非严格模式下这个变量会成为window的一个属性,也就是成为全局变量。string、int这样的值就是直接把值放在变量的存储空间里,object对象就是把指针指向变量的存储空间。函数执行,就将函数的环境推入一个环境的栈中,执行完成后再弹出,控制权交还给之前的环境。JS作用域其实就是这样的执行流机制实现的。

3、什么是HTTP协议无状态协议?怎么解决HTTP协议无状态协议?

  1. 无状态协议对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息。
  2. 无状态协议解决办法:通过1、Cookie 2、通过Session会话保存。

4、HTTP协议有什么组成?

请求报文包含三部分:
● 请求行:包含请求方法、URI、HTTP版本信息
● 请求首部字段
● 请求内容实体 响应报文包含三部分:
● 状态行:包含HTTP版本、状态码、状态码的原因短语
● 响应首部字段
● 响应内容实体

5、HTTP协议中有那些请求方式?

● GET: get请求是用来获取数据的,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作。
● POST:post请求一般是对服务器的数据做改变,常用来数据的提交,新增操作。
● PUT: put请求与post一样都会改变服务器的数据,但是put的侧重点在于对于数据的修改操作,但是post侧重于对于数据的增加。
● DELETE:delete请求用来删除服务器的资源。
● HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
● OPTIONS:用来描述了目标资源的通信选项,返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性。

6、HTTP常见头部字段

  • 常用标准请求头字段
请求头说明
Accept设置接受的内容类型
Accept-Charset设置接受的字符编码
Accept-Encoding设置接受的编码格式
Accept-Datetime设置接受的版本时间
Accept-Language设置接受的语言
Cache-Control设置请求响应链上所有的缓存机制必须遵守的指令
Cookie设置服务器使用Set-Cookie发送的http cookie
Connection设置当前连接和hop-by-hop协议请求字段列表的控制选项
Content-Length设置请求体的字节长度
User-Agent用户代理的字符串值

  • 常见标准响应头
响应头说明
Access-Control-Allow-Origin指定哪些站点可以参与跨站资源共享
Cache-Control告诉服务端到客户端所有的缓存机制是否可以缓存这个对象,单位是秒
Content-Encoding设置数据使用的编码类型
Content-Language为封闭内容设置自然语言或者目标用户语言
Content-Length响应体的字节长度
Content-Type设置响应体的MIME类型
Date设置消息发送的日期和时间
ETag特定版本资源的标识符,通常是消息摘要
Expires设置响应体的过期时间
Last-Modified设置请求对象最后一次的修改日期
Server服务器名称
Vary通知下级代理如何匹配未来的请求头已让其决定缓存的响应是否可用而不是重新从源主机请求新的

7、 HTTP响应状态码

7.1 HTTP Status Code 1xx 请求信息

这一组状态码表明这是一个临时性响应。此响应仅由状态行和可选的HTTP头组成,以一个空行结尾。由于HTTP/1.0未定义任何1xx状态码,所以不要向HTTP/1.0客户端发送1xx响应。

Http状态码Http Status CodeHttp状态码含义中文说明
100100 Continue请继续请求
101101 Switching Protocols请切换协议
102102 Processing将继续执行请求

7.2 HTTP Status Code 2xx 成功状态

这一组状态码表明客户端的请求已经被服务器端成功接收并正确解析。

Http状态码Http Status CodeHttp状态码含义中文说明
200200 OK请求成功
201201 Created请求已被接受,等待资源响应
202202 Accepted请求已被接受,但尚未处理
203203 Non-Authoritative Information请求已成功处理,结果来自第三方拷贝
204204 No Content请求已成功处理,但无返回内容
205205 Reset Content请求已成功处理,但需重置内容
206206 Partial Content请求已成功处理,但仅返回了部分内容
207207 Multi-Status请求已成功处理,返回了多个状态的XML消息
208208 Already Reported响应已发送
226226 IM Used已完成响应

7.3 HTTP Status Code 3xx 重定向状态

这一组状态码表示客户端需要采取更进一步的行动来完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

Http状态码Http Status CodeHttp状态码含义中文说明
300300 Multiple Choices返回多条重定向供选择
301301 Moved Permanently永久重定向
302302 Found302 Found
303303 See Other当前请求的资源在其它地址
304304 Not Modified请求资源与本地缓存相同,未修改
305305 Use Proxy305 Use Proxy
306306 (已废弃)Switch Proxy(已废弃)请切换代理
307307 Temporary Redirect307 Temporary Redirect
308308 Permanent Redirect永久重定向,且禁止改变http方法

7.4 HTTP Status Code 4xx 客户端错误

这一组状态码表示客户端的请求存在错误,导致服务器无法处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

Http状态码Http Status CodeHttp状态码含义中文说明
400400 Bad Request请求错误,通常是访问的域名未绑定引起
401401 Unauthorized需要身份认证验证
402402 Payment Required-
403403 Forbidden禁止访问
404404 Not Found请求的内容未找到或已删除
405405 Method Not Allowed不允许的请求方法
406406 Not Acceptable无法响应,因资源无法满足客户端条件
407407 Proxy Authentication Required要求通过代理的身份认证
408408 Request Timeout请求超时
409409 Conflict存在冲突
410410 Gone资源已经不存在(过去存在)
411411 Length Required无法处理该请求
412412 Precondition Failed请求条件错误
413413 Payload Too Large请求的实体过大
414414 Request-URI Too Long请求的URI过长
415415 Unsupported Media Type415 Unsupported Media Type
416416 Range Not Satisfiable请求的范围无效
417417 Expectation Failed无法满足的Expect
418418 I’m a teapot愚人节笑话
421421 There are too many connections from your internet address连接数超限
422422 Unprocessable Entity请求的语义错误
423423 Locked当前资源被锁定
424424 Failed Dependency当前请求失败
425425 Unordered Collection未知
426426 Upgrade Required请切换到TLS/1.0
428428 Precondition Required请求未带条件
429429 Too Many Requests并发请求过多
431431 Request Header Fields Too Large请求头过大
449449请重试
451451 Unavailable For Legal Reasons访问被拒绝(法律的要求)
499499 Client Closed Request客户端主动关闭了连接

7.5 HTTP Status Code 5xx 服务器错误状态

这一组状态码说明服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

Http状态码Http Status CodeHttp状态码含义中文说明
500500 Internal Server Error服务器端程序错误
501501 Not Implemented服务器不支持的请求方法
502502 Bad Gateway网关无响应
503503 Service Unavailable服务器端临时错误
504504 Gateway Timeout网关超时
505505 HTTP Version Not Supported服务器不支持的HTTP版本
506506 Variant Also Negotiates服务器内部配置错误
507507 Insufficient Storage服务器无法存储请求
508508 Loop Detected508 Loop Detected
509509 Bandwidth Limit Exceeded服务器带宽限制
510510 Not Extended获取资源策略未被满足
511511 Network Authentication Required需验证以许可连接
599599 Network Connect Timeout Error网络连接超时
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端~初学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值