在网站开发中,经常会听到HTTP协议,TCP/IP,DNS等,但平时的开发中又不需要自己去设置或者编写,所以总会被忽略。而了解底层的协议对于开发也是有帮助的,理解原理之后排查bug也是事半功倍。因此这里整理一下常见的一些协议备用。
一、HTTP协议
简介:
超文本传输协议 英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
概述:
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其他的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
工作原理:
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求的报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP协议是基于TCP/IP协议之上的应用层协议。
基于 请求-响应 的模式
无状态保存
无连接
HTTP请求方法(八种):
GET,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT
HTTP状态码:见另外一篇博文:PHP相关面试可能会问到资料整理-CSDN博客
状态代码的第一个数字代表当前响应的类型:
1xx消息——请求已被服务器接收,继续处理 2xx成功——请求已成功被服务器接收、理解、并接受 3xx重定向——需要后续操作才能完成这一请求 4xx请求错误——请求含有词法错误或者无法被执行 5xx服务器错误——服务器在处理某个正确请求时发生错误
URL
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
传送协议。 层级URL标记符号(为[//],固定不变) 访问资源需要的凭证信息(可省略) 服务器。(通常为域名,有时为IP地址)端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略) 路径。(以“/”字符区别路径中的每一个目录名称)查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)片段。以“#”字符为起点
以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:
http,是协议; www.luffycity.com,是服务器; 80,是服务器上的默认网络端口号,默认不显示; /news/index.html,是路径(URI:直接定位到对应的资源); ?id=250&page=1,是查询。 大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。
由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如 www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。
HTTP请求格式
HTTP响应格式
参考文章:HTTP协议详解:基础、工作原理与实战应用-CSDN博客