1.相关问题

问题1: 客户端访问url到服务器,整个过程会经历哪些

问题2: 描述HTTPS和HTTP的区别

问题3: HTTP协议的请求报文和响应报文格式

问题4: HTTP的状态码有哪些?

2.问题回答

问题1:

按照TCP/IP的五层协议描述

1.首先进行域名解析,域名解析具体过程如下:

  • 浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表
  • 若没有,则搜索操作系统的DNS缓存;
  • 若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
    • 本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
    • 本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
    • 本地域名服务器向权限域名服务器发起请求,得到IP地址;
  • 本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来;
  • 操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;

2.应用层:浏览器发起HTTP请求;

3.传输层:选择传输协议,TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息;提供端到端的连接

4.网络层:通过IP协议将IP地址封装为IP数据报;通过路由传输到对端。然后此时会用到ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;

5.数据链路层:根据mac地址,建立连接

6.物理层:物理层传输010101的数据流

7.服务器响应请求并请求客户端要的资源,传回给客户端;.断开TCP连接,浏览器对页面进行渲染呈现给客户端。

问题2:

http协议:

  1. 端口:TCP80端口
  2. 超文本传输协议,信息是明文传输
  3. 连接简单,是基于无状态的传输。

https协议:

  1. 端口:TCP443端口
  2. 具有安全协议的超文本传输协议,具有安全性的ssl加密传输协议,信息是密文传输
  3. 由ssl+http协议构建的可进行加密传输,身份认证的网络协议
  4. https协议需要到ca机构申请ssl证书,免费证书较少,高级ssl证书需一定的费用

注:关于http版本的相关内容还待学习,主要是1.0/1.1/2.0版本之间的区别

问题3:

http请求报文:HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:

http响应报文:响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:

请求报文以及响应报文相关具体的应用,需要参考具体的项目或者是实例。

问题四:

状态码如200 OK,以3位数字和状态原因构成。数字中的第一位指定了响应级别,后两位无分别。响应分别有5种。

每个系列常用的code

2xx:200(get请求成功),201(post,put创建了一个资源),204(删除一个资源,服务器删除成功)

3xx:301(服务器永久移动,自动转发到新的位置),302(服务器临时移动,原服务器没有永久移除)俩者的最大区别为搜索引擎是否记录

4xx:400(客户端请求语法错误),403(服务器拒绝提供服务),404(客户端引用了不存在的资源)

5xx:500(服务器错误,拒绝请求),503(服务器当前不能处理客户请求,当前服务器不可用),504(请求超时,没有到达网关)

500,503,504常见场景

500:常见场景为编程语言语法错误,web脚本错误,高并发,打开文件数超过系统资源限制,一般解决思路为查看服务器nginx,python的错误日志,负载均衡,修复脚本错误

503:常见场景为服务器无法使用,一般为服务器超载或者是停机维护,解决思路为查看服务器系统资源或者确定服务器开启状态

502,504:常见场景为web服务器故障,程序进程不够,一般解决思路为查看nginx代理的问题,或者是nginx的conf配置相关

ok

最新文章

  1. 什么是jquery $ jQuery对象和DOM对象 和一些选择器
  2. Codeforces Round #342 (Div. 2) A. Guest From the Past(贪心)
  3. IE、FF、Chrome浏览器中的JS差异介绍
  4. Glacierskating测试记录
  5. 点击input框,不让手机软键盘弹出的办法
  6. SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions
  7. iOS - UIGestureRecognizer
  8. java中身份证号15位转18位
  9. java 分割split
  10. C#之数组
  11. Ext Js详解指南
  12. 常见web容器
  13. JavaScript操作符(布尔操作符、乘性操作符和加性操作符)
  14. springboot+ELK+logback日志分析系统demo
  15. 配置远程主机http服务器 打包资源
  16. 1-自己动手编写ArrayList集合
  17. ios UITableView高度自适应(转)
  18. 如何往eclipse中导入maven项目
  19. C# Attribute应用:类签名
  20. ubuntu cp(copy) command

热门文章

  1. IDEA创建spring加struts2项目
  2. element-ui 弹出添加拖拽功能
  3. 数组 slice方法和splice方法的区别
  4. Python天天学_01_基础1
  5. ie文件断点续传
  6. java实现大文件上传
  7. CF 354 div2 B 酒杯金字塔
  8. 导数与微分简单总结(updated)
  9. getFieldDecorator用法(一)——登录表单
  10. 一起学vue指令之v-bind