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网关超时或者代理服务器超时
04-07 10:11