(http协议中的tcp协议 )协议三次握手和四次挥手
http的默认端口号80
https默认端口号443
ftp默认端口21
mysql默认端口号3306
a.有可能首页没什么数据,就是个静态页
b.也有可能页面并不完整,但是后端不渲染,先返回给前端,后期前端通过ajax重新渲染
注:1.前端渲染减轻服务器压力,但是不利于搜索引擎优化
2.后端渲染服务器压力较大,但是利于搜索引擎优化
(1)异步请求,再回调里才能拿到结果,或者可以使用promise
(2)状态码
(3)数据格式,一般来讲都是json
超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网数据通信的基础。
HTTP是一个客户终端(用户)和服务器端(网站)请求和答应是标准(TCP)。通过使用网页浏览,网络爬虫或者其他的工具,客户端发起一个HTTP协议到服务器上指定端口(默认端口为80)。我们成这个客户端为用户代理程序(user agent)。应答的服务器上存着一些资源,比如HTML文件和图像。我们称这个应答服务器为原服务器(origin server)。在用户代理和原服务器中间可能存在多个中间层,比如代理服务器、网关或者隧道(tunnel)。
尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用他或他支持的层。事实上,HTTP协议可以在任何互联网协议上,或其他网络上实现。HRRP假定其它下层协议提供可靠传输。因此,任何能够提供这种保证的协议都可以被其他使用。因此也就是在其他TCP/IP协议族中使用TCP作为其传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器就会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求文件、错误消息、或者其他信息。
HTTP协议定义web客户端如何从web服务器请求web页面,以及服务器如何把web页面传给客户端。HTTP协议采用了请求/相应模型。客户端向服务器发送一个请求报文,请求报文含请求的方法、URL、协议版本、请求头部和请求数据。
注:套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
1.客户端连接到web服务器
一个HTTP客户端,通常是浏览器,与web服务器的HTTP端口建立一个TCP套接字连接。
2.发送HTTP请求
通过TCP套接字,客户端向web服务器发送一个文本的请求报文。HTTP请求报文由3部分组成(请求行+请求头+请求体)
3.服务器接收请求并返回HTTP响应
web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。响应头由三部分组成
1、一个数字和文字组成的状态码,用来显示请求成功或者失败。
2、响应头,和请求头一样,响应头也包含许多有用的信息,比如服务器类型、日期时间、内容类型和长度等。
3、响应体,也就是响应报文。
4.释放连接TCP连接
若connection模式为close,则服务器主动关闭连接,客户端被动关闭连接,释放TCP连接。
若connection模式为keepalive,组该连接会保持一段时间,再改时间内可以说基础接收请求。
5.客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
1.浏览器向DNS服务器清洁解析该URL中是域名所对应的IP地址;
2.解析出ip地址之后,根据IP地址和默认端口80,和服务器建立TCP连接;
3.浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;
4.服务器对浏览器请求做出相应,并把对应的html文本发送给浏览器;
5.释放TCP连接;
6.浏览器将该html文本解析,并显示内容
http协议是基于TCP/IP协议之上的应用层协议
基于请求-响应的模式
http协议规定,请求从客户端发出,最后服务器响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收请求之前不会发送响应。
无状态保存
HTTP是一种不保存状态,即无状态协议。http协议自身不对请求和响应之间的状态进行保存。也就是说在http这个级别,协议对于发送过的请求或响应都不做持久化处理。
使用HTTP协议,每当有新的请求发送时,就会有对应的新的响应产生。协议本身并不能保留之前的一切的请求或响应报文信息。这是为了更快的处理大量事务,确保协议的可伸缩性,而特意吧HTTP协议设计成如此简单。可是,随着web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。跳转页面却任然需要保存登录状态这种情况就需要保存状态。http为无状态协议,但是为了实现这种功能就引入了cookie技术。有了cookie再使用HTTP协议,就可以管理状态了。有关cookie的讲解稍后继续。
无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并受到客户的应答后,即断开连接。才用这种方式,可以节省传输时间,并且可以提高并发性,不能和每个用户建立长久的连接,请求一次响应一次,服务器和客户端连接就中断了。早期的http是请求一个相应之后直接就断开了,但是现在的http协议1.1版本不是直接断开,而是等待几秒钟,目的是等待用户的后续操作,如果用户在这几秒内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒中,用户没有发送新的请求,那么就会断开连接,这样可以提高效率,减少短时间内建立连接的次数。默认3秒
物理层 > 数据链路层 > 网络层 > 传输层 > 会话层 > 表示层 > 应用层
请注意查询字符串(名称/值对)是在get请求的url中发送的
请注意,查询字符串(名称/值对)是在post请求的http主体中发送的
post请求不会被缓存
post请求不会保留在浏览器历史记录中
post请求不能被收藏为书签
post请求对数据长度没有要求
按照网上大部分文章解释,post比get安全,因为地址栏看不见。
然而从传输角度来说他们都是不安全的,因为http在网络上是明文传输的只要在网络节点上捉包,就能完整的获取数据报文。要想安全传输,就只有加密也就是https。
对于get方式请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
而对于post,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200(返回数据)
so,基于这一点三个注意
1.get与post都有自己的语义,不能随便混用。
2.据研究,在网络环境好的情况下,发一次包和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次保的TCP在验证数据包的完整性上,有非常大的优点。
3.并不是所有的浏览器都发送两次包,Firefox就只发送一次。
所有HTTP响应的第一行都是状态行,依次是当前http版本号,三位数字组成的状态码,以及描述状态的短语,彼此由空格分隔。
状态码的第一个数字代表当前响应的类型:
类别 | 原因短语 | |
---|---|---|
1xx | information(信息状态码) | 接收的请求正在处理 |
2xx | success(成功状态码) | 请求正常,处理完毕 |
3xx | redirection(重定向状态码) | 需求进行附加操作已完成请求 |
4xx | client error(客户端错误状态码) | 服务器无法处理请求 |
5xx | server error(服务器错误状态码) | 服务器处理请求出错 |
url = 协议 + 域名或IP + 端口号 + 路径 + 查询字符串 + 锚点
超文本传输协议(http)的统一资源定位符,将从因特网获取信息的五个基本元素,包括在一个简单的地址中;
NDS就像是个翻译官,能够把baidu.com翻译成220.181.111.188 让机器理解。
DNS是用来做域名解析的,他会在你上网输入网址后,把它转换成IP,然后去访问服务器。
参考文档:https://www.cnblogs.com/weibanggang/p/9454581.html
参考文档:https://www.w3school.com.cn/tags/html_ref_httpmethods.asp
参考文档:https://www.cnblogs.com/an-wen/p/11180076.html