HTTP协议相关理论

1 HTTP协议的请求与响应

1.1HTTP协议的特性

HTTP是一种建立在TCP/IP协议栈之上的应用层协议。通常使用TCP作为传输层协议,并且默认使用 端口80 进行通信。在某些情况下(如80端口被占用),HTTP服务也可以使用端口8080

1.2 HTTP的两个关键特性:

1 HTTP是无连接的,具体是指HTTP协议在应用层不需要建立HTTP的连接

HTTP的无连接,是客户端想要获取一个HTTP服务器中的资源,于是客户端就直接通过输入HTTP服务器相应的URL发出一个HTTP请求,而无需在输入HTTP的URL之前先建立与该服务器的HTTP连接。
但实际上HTTP客户端在发送请求之前,是需要先与服务器建立一个TCP连接的。

实际的连接步骤:
1 建立TCP连接
2 发送HTTP请求:通过传输层建立好的TCP连接发送HTTP请求
3 服务器处理请求
4 服务器发送HTTP响应:服务器通过同一个TCP连接发送HTTP响应给客户端
5 关闭TCP链接:如果是持久连接则TCP连接可以保持,以便进行多个HTTP请求和响应交换

HTTP协议本身不负责建立连接,这是由底层的TCP协议来完成的。HTTP的“无连接”特性主要是指在应用层,即HTTP层面上,每个请求和响应都是独立的,服务器在处理完请求后不需要维持与客户端的连接状态。

2 HTTP本身是无状态的

这是指HTTP协议本身不保留任何请求之间的状态信息。对于每个HTTP请求,服务器都会独立处理,而不会考虑之前的任何请求。如果需要维持状态,比如用户登录状态,这需要通过其他机制实现,如使用Cookies或Session。
Cookies的实现原理:见《计算机网络》书,282页

关于底层是否会使用同一个TCP连接,这取决于是否使用了持久连接。

1.3 HTTP协议报文

HTTP报文分为请求报文和响应报文,主要由三部分组成:

  1. 请求行(Request Line)或状态行(Status Line):

    在请求报文中,请求行包括请求方法(如GET、POST、PUT等)、请求的资源的URL以及HTTP协议的版本。
    	
    	GET:用于请求指定的资源。其中请求资源的参数是通过URL的查询字符串传递的:及在URL的路径中给出。见《计算机网络》书,275页。
    	POST:用于向指定资源提交数据,请求服务器进行处理(提交表单、上传文件)。数据存放在请求体中。
    	PUT:用于向指定资源上传最新内容。通常用于更新现有资源。
    			要求客户端体提供完整的资源表示,而不仅仅是更改小部分。
    			
    在响应报文中,状态行包括HTTP协议的版本、状态码(如200表示成功,404表示未找到,500表示服务器内部错误,403表示没有权限等)和状态描述(描述状态码)
    
    
  2. 请求头(Request Headers)或响应头(Response Headers)

    这些头部字段包含了关于请求或响应的额外信息。
    1.请求头:
    	请求头包含了关于请求的额外信息,如User-Agent(用户代理)、Accept(可接受的内容类型)、Content-Type(内容类型)、Host(请求的主机名)等
    
    2.响应头:
    	响应头包含了关于响应的额外信息,如Content-Type(内容类型)、Content-Length(内容长度)、Server(服务器软件名称)等。
    	
    	内容类型(Content-Type)即主体文件类型如:text、html、JSON...
    	内容长度(Content-Length)即主体数据的字节长度、缓存控制(Cache-Control)、Cookie、认证信息等。
    	头部字段以键值对的形式出现,每行一个。例如:Host:www.example.com
    
  3. 请求体(Request Body)或响应体(Response Body)

    请求体通常在POST或PUT请求中使用,用于向服务器发送数据,比如表单数据或JSON数据。
    
    响应体包含了服务器返回的实际数据,如HTML文档、图片、视频等。
    

HTTPS:

​ HTTPS是HTTP的安全版本,通过SSL/TLS协议对通信进行加密。

1.4 HTTP的URL格式:

http://<主机名>:<端口号>/<路径>?<查询字符串>#<片段标识符>
其中:
    协议:http 表示使用的是HTTP协议。如果是HTTPS,则表示使用的是HTTP的安全版本,即加密的HTTP。

    主机名:这是服务器的域名或IP地址,例如 www.example.com。

    端口号:这是服务器监听的端口,默认情况下HTTP的端口是80,HTTPS的端口是443。如果使用默认端口,则端口号可以省略。

    路径:这是服务器上资源的路径,例如 /index.html。

    查询字符串:这是附加在路径后面的参数,用于传递额外的信息给服务器。查询字符串以?开始,参数之间用&分隔,例如 ?id=123&name=example。

    片段标识符:这是URL的一部分,用于指向页面中的特定部分。它以#开始,例如 #section1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值