文章目录
http协议
访问www.baidu.com背后发生了什么?
1、分析url
2、解析域名的ip地址
先看缓存 (浏览器www.baidu.com 112.223.223.223)——linux的缓存nscd
再看/etc/hosts文件里面有没有记录
再看/etc/resolv.conf里的本地域名服务器有没有解析
本地域名服务器记录的解析如果有就会直接返回,如果没有解析,就会去根域名服务器找全球13台,依次迭代查询得到最后的ip解析地址
3、进行tcp三次握手,建立连接
4、http应用数据的发送,请求百度页面
5、服务器收到请求,然后返回百度的html页面文档
6、浏览器收到页面内容之后,运行展示在窗口上
Http定义
HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
http协议基于TCP协议传输 ——明文 默认端口是80
http协议特点
1、简单快捷
2、灵活
3、无状态——每次请求是独立的,上一次的请求和下一次的请求互不相干。比如,你登录了某个网站,它不能知道你上一次请求已经登录过了。所以需要借助其他东西来完成这个僧录认证。
会话保持——session和cookie2
session(服务器端)
cookie(客户端)
http作用
将网页文件从服务器里传输到客户机里(浏览器)
浏览器——》http——》web server(gin,nginx,flask等)
http报文结构
请求报文
从客户端向web服务器发送的请求报文。报文的所有字段都是ASCII码。
host 表示访问哪个网站——》URL
user-agent 使用的用户代理——》浏览器
响应报文
从web服务器到客户机的应答。报文的所有字段都是ASCII码
F5和F5 CTRL的区别
-
F5+CTRL——》强制浏览器发起新的请求,要求服务器重新传输网页数据,不适用缓存——》200
不会携带If-Modified-Since字段和If-None-Match字段
-
F5——》发起新的请求,但是是从缓存里拿数据——》304
会携带If-Modified-Since字段和If-None-Match字段
请求报文里是否有上面的两个首部字段来判断是否曾经访问过
状态码
-
200——服务器成功响应
-
301——Moved permanently 永久重定向 请求资源的URL已经永久更改,在响应中给出了新的URL
-
302——Moved temporarily 临时重定向
-
304——Not modified 没有修改 服务器的If-Modified-Since的时间与浏览器缓存里的时间一致且服务器当前网页未作修改,浏览器缓存里的内容和服务器的内容一致。
如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。 简单的表达就是:服务端已经执行了GET,但文件未变化。
-
401——认证失败 如:要求提交的用户名和密码不正确
-
403——Forbidden 禁止访问 web浏览器不能访问某个文件,在服务器上设置了权限的限制
-
404——Not found 访问的页面没有找到,服务器上没有请求的资源
-
405——Not allowed 方法不对(get或者post)
-
499——Client has closed connection 客户端断开连接
-
500——Internal server error 服务器内部错误
-
502——Bad gateway 网关障碍 就是负载均衡器是好的,但是后端的real server挂了
-
503——Service temporarily unavailable 服务临时不可用 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状态是临时的,会在一段时间后恢复
-
504——Gateway time-out 网关超时 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URL标识出的服务器,如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应,可能是后端的服务器网络或者防火墙问题导致
(12条消息) HTTP常见状态码(14种)_Running_96的博客-CSDN博客_http状态码
请求方法
- GET - 从指定的资源请求数据,通过url里携带数据
- POST - 向指定的资源提交要被处理的数据,数据可以是json或者其他格式,数据放在body部分。
-
GET和post的区别
GET 提交参数一般显示在 URL 上,POST 通过表单提交不会显示在 URL 上,POST 更具隐蔽性:
1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。
2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。
3、Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post 的所有操作对用户来说都是不可见的。
4、Get 传输的数据量小,这主要是因为受 URL 长度限制;而 Post 可以传输大量的数据,所以在上传文件只能使用 Post(当然还有一个原因,将在后面的提到)。
5、Get 限制 Form 表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字符集。
6、Get 是 Form 的默认方法。
7、使用 Post 传输的数据,可以通过设置编码的方式正确转化中文;而 Get 传输的数据却没有变化。在以后的程序中,我们一定要注意这一点。
HTTP 方法:GET 对比 POST | 菜鸟教程 (runoob.com)
[99%的人理解错 HTTP 中 GET 与 POST 的区别 - OSCHINA - 中文开源技术交流社区](https://www.oschina.net/news/77354/http-get-post-different#:~:text=直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 …,GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会)
首部字段
http代理
什么是HTTP代理?
HTTP代理又称Web缓存或代理服务器,是一种网络实体,能代表浏览器发出HTTP请求,并将最佳的一些请求和响应暂存在本地磁盘中,当请求的Web页面先前暂存过,则直接将暂存的页面发给客户端(浏览器),无需再次访问Internet。
Https
定义
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
https基于TLS/SSL协议加密进行TCP传输 默认端口是443
SSL与TLS
- SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
- TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
http与https
http协议基于TCP协议传输 ——明文 默认端口是80
参考网站:
(12条消息) HTTPS原理详解_猪哥66的博客-CSDN博客_https原理
(12条消息) HTTP与HTTPS比较以及通信过程_II Sole的博客-CSDN博客
csdn.net/u014044812/article/details/79571927?spm=1001.2014.3001.5501)
(12条消息) HTTP与HTTPS比较以及通信过程_II Sole的博客-CSDN博客
https://baijiahao.baidu.com/s?id=1685474345600994715&wfr=spider&for=pc&qq-pf-to=pcqq.group