TCP&HTTP协议详解
1、HTTP协议理解
超文本传输协议(hypertext transfer protocol,HTTP)是在互联网上应用最为广泛的-种网络协议。所有的WWW服务器都基于该协议。
http的内容就有
- http协议;
- http资源定位
- http请求
- 响应头详细信息
- http状态码
- MIME类型;
超文本传输协议标准架构–>RFC–>是http的基础
2、http协议与tcp协议区别
从应用领域来说:
- tcp协议主要用于数据传输控制
- http协议主要用于应用层的数据交换
http协议是应用层协议,建立在TCP协议基础之上;
- http协议以客户端请求额服务器端应答为标准;
- 客户端给服务器端发起请求
- TCP会建立三次握手–>建立数据连接通道
- 然后进行http的数据交互;
- http连接是无状态连接;建立的时间非常端
- tcp连接是有状态连接;
3、资源定位标识符
http的请求内容资源由统一的资源标识符(URI)来表示
资源定位以及标识有三种:
- URI:用来唯 标识一个资源
- URN:通过名字来标识或识别资源
- URL:是一种具体的URI,URL可以用来标识一个资源,而且可以访问或者获取该资源
概念:
- protocol: 基于某种协议,常见协议有HTTP、HTTPS、FTP、RSYNC等
- http协议
- host: 服务器的IP地址或者域名。
- www.baidu.com
- port: 服务器的端口号,如果是HTTP 80端口,默认可以省略.
- path : 访问资源在服务器的路径
- 192.168.75.30:/a.txt
- query-string: 传递给服务器的参数及字符串
- tid=2
- anchor-:锚定结束。
- baidu
4、http与端口通信
http web服务默认会监听80端口;‘在linux中,每个运行的程序都会监听一个本地的端口;从而我们引入一个端口的概念;
端口的概念:
- 端口是TCP/IP协议中应用层进程与传输层协议实体间的通信接口
- 端口是操作系统可分配的一种资源,用于实现数据转发,接收使用的;
- 应用程序通过系统调用与某个端口绑定后,传输层传给该端口的数据会被该进程接收,相应进程发给传输层的数据都通过该端口输出;
引入端口的概念,可以固定一些程序运行的时候,识别服务的类型;
没有端口号的时候,使用PID来标识,但是PID是没有固定的,因此引入一个端口的概念来统一标识;比如说
- http:80
- ftp:21、20
- mysql:3306
套接字的理解:
- 计算机的发展趋势,TCP/IP协议模型引入了套接字的应用程序接口;
- 基于socket接口技术:一台计算机就可以与任何一台计算机具有socket接口的计算机进行通信;
5、http的request与response
如果客户请求数据–>发送request–>服务器接收都请求–>给与response回应;这就是大概的理解;
这里有三个部分需要理解
- request line:
- request header:
- request body:
通过一条命令来理解web服务器的request 和response的处理流程
#request 的信息组成
[root@Node1 ~]# curl -v 192.168.75.130
#一下这里就是请求头详细信息
* About to connect() to 192.168.75.130 port 80 (#0)
* Trying 192.168.75.130...
* Connected to 192.168.75.130 (192.168.75.130) port 80 (#0)
> GET / HTTP/1.1 #请求类型是get
> User-Agent: curl/7.29.0 #代理信息
> Host: 192.168.75.130 #处理的头部就是目标主机
> Accept: */*
>
#第二部分就是response的请求头详细
< HTTP/1.1 200 OK #这个就是状态码
< Server: nginx/1.20.1 #服务器使用的类型
< Date: Thu, 30 Mar 2023 03:18:05 GMT
< Content-Type: text/html
< Content-Length: 15
< Last-Modified: Thu, 30 Mar 2023 03:18:00 GMT
< Connection: keep-alive
< ETag: "6424ff68-f"
< Accept-Ranges: bytes
<
#这里就是正文的信息
this is nginx
* Connection #0 to host 192.168.75.130 left intact
reques请求方法有如下几个:
- get方法: 向特定的资源发出请求,获取服务器端数据
- post方法: 向Web服务器提交数据进行处理请求,常指提交新数据
- put方法:向Web服务器提交上传最新内容,常指更新数据。
- delete:请求删除request-URL所标识的服务器资源
- trace:回显服务器收到的请求,主要用于测试或诊断
- connect:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- options:返回服务器针对特定资源所支持的HTTP请求方法
- head方法:HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体
6、http常见的几种状态码
- 100:continue,表示继续,客户端继续请求HTTP 服务器
- 101:switching protocols服务器根据客户端的请求切换协议,切换到 HTTP的新版本协议
- 200:OKHTTP 请求完成,常用于 GETPOST 请求中
- 301:moved permanently:永久移动,请求的资源已被永久的移动到新 URI
- 302:found:临时移动,资源临时被移动,客户端应继续使用原有 URI
- 304:not modified:文件未修改,请求的资源未修改,服务器返回此状态码时,常用于缓存
- 400:bad request:客户端请求的语法错误,服务器无法解析或者访问
- 401:unauthorized:请求要求用户的身份认证
- 402:payment required:此状态码保留,为以后使用
- 403:forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求
- 404:not found:服务器没有该资源,请求的文件找不到
- 500:internal server error服务器内部错误,无法完成请求
- 502:bad gateway服务器返回错误代码或者代理服务器错误的网关
- 503:service unavailable服务器无法响应客户端请求,或者后端服务器异常
- 504:gateway time-out网关超时或者代理服务器超时