Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP 请求和状态码 #12

Open
weishuping opened this issue Sep 19, 2016 · 2 comments
Open

HTTP 请求和状态码 #12

weishuping opened this issue Sep 19, 2016 · 2 comments

Comments

@weishuping
Copy link

HTTP 请求和状态码

TCP/IP协议和输入URL之后浏览器做了什么

问:输入URL之后浏览器做了什么?
例如:在浏览器地址栏输入网址:www.baidu.com之后浏览器怎么把最终的页面呈现出来的呢?这个过程分为两个部分:网络通信和页面渲染。
一、网络通信:在互联网内各个网络设备之间遵循TCP/IP协议。根据分层顺序与对方进行通信。分层从高到低分为:应用层、传输层、网络层、数据链路层、物理层。
1、在浏览器输入URL之后,http属于网络协议,www.baidu.com是网络地址,指出需要的资源在哪台计算机上。一般网络地址可以是域名或者IP地址,域名更好记。那么这个域名会被解析为IP地址。
2、客户端会先检测本地是否有对应的IP地址,有的话就返回IP地址,没有的话就请求上级的DNS服务器,直到找到或者到根节点。
3、应用层客户端发送HTTP请求包括请求头和请求主体。请求头包含了请求方式、目标url、遵循的协议等。
4、传输层TCP传输报文。TCP协议为可靠传输提供字节流服务。为了方便传输,将数据分为以报文段为单位的数据包进行管理。
5、网络层IP协议查询MAC地址。IP协议的作用就是把TCP分割好的各种数据包传送给接收方,而要保证确实能传到接收方还需要接受对方的MAC地址。IP地址和MAC地址一一对应,一个网络设备的IP地址可以更换,但是MAC地址是固定不变的。ARP协议可以将IP地址解析为对应的MAC地址。当通信的双方不在同一局域网时,需要多次中转才能达到最终的目标。
6、数据到达数据链路层
在找到对方的MAC地址之后,就把数据发送到数据链路层,这时客户端发送请求的阶段结束。
7、服务器接受数据
接收端的服务器在链路层接收到数据包,再层层向上直到应用层。又要重新组合原来的HTTP 请求报文。
8、服务器响应请求
服务器收到客户端发送的HTTP请求后查找客户端请求的资源并返回响应报文,这其中包含一个很重要的信息--状态码。
9、服务器返回响应的文件
返回HTML文件后等待渲染。
二、页面渲染
现代浏览器渲染页面的过程: 解析HTML以构建DOM树-> 构建渲染树->布局渲染树-> 绘制渲染树

常见的HTTP状态码

1XX 临时响应

临时响应并让请求者继续执行操作
100(继续) 请求者应当继续提出请求。服务器已经收到请求的第一部分,正在等待其余部分。
101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。

2XX 成功

表示成功处理了请求的状态码
200(成功)服务器已成功处理了请求。
201(已创建)请求成功并且服务器创建了新的资源。
202(已接受)服务器已接受服务但尚未处理。
203(非授权信息)服务器已成功处理了请求,但是返回的信息可能来自于另一来源。
204(无内容)服务器处理了请求,但没有返回任何内容。
205(重置内容)服务器处理了请求,但没有返回任何内容,与204不同,此响应要求请求者重置文档试图(例如:清除表单内容已输入新内容)
206(部分内容)服务器成功处理了部分GET请求

3XX 重定向

300(多种选择) 针对请求,服务器可执行多种操作。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
301(永久移动)请求的网页已永久移动到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引
303(查看其它位置)所请求的页面可在别的url下被找到。
304(未修改)自从上次请求后,请求的网页未修改过。原来缓冲的文档还可以继续使用,进而节省带宽和开销。
305(使用代理)请求者应使用代理
306 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
307 (临时重定向)被请求的页面已被移到新的url

4xx 客户端错误

400(错误请求) 服务器不能理解该请求的处理
401(未授权)请求要求_身份验证_。对于登录后请求的网页,服务器可能返回此响应。
402 此代码商无法使用
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求的网页
405(方法禁用)禁用请求中指定的方法
406(不接受)服务器生成的响应无法被客户端所接受。
407(需要代理授权)用户必须使用代理服务器认证,这样请求才会被处理
408(请求超时)请求超出了服务器的等待时间
409(冲突)由于冲突,请求无法完成
410(已删除)如果请求的资源已永久删除,服务器返回这个。它和404代码类似,但在资源以前存在而现在不存在的情况下,有时会用来代替404.如果资源永久移动,应该使用301指定资源的新位置。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的URL过长)
415(不支持的媒体类型)请求的格式不受请求页面的支持
416(请求范围不符合要求)服务器不能满足客户在请求中指定的Range头。
417(未满足期望值)服务器未满足”期望”请求标头字段的要求。

5xx 服务器错误

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

@weishuping
Copy link
Author

原理 原理 原理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants