HTTP——超文本传输协议HTTP、请求和响应、GET和POST请求

本文深入解析HTTP协议的基础知识,包括请求与响应流程、GET与POST请求的区别、常见状态码及HTTP无状态连接的问题与解决方案,适合初学者理解网络通信原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录


HTTP协议概述

  • WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。
    在这里插入图片描述

  • HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议之上的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。

  • HTTP协议到底约束了什么:
    1.约束了浏览器以何种格式向服务端发生数据:
    2.约束了服务器应该以何种格式来接受客户端发送的数据:
    3.约束了服务器应该以何种格式来反馈数据给浏览器;
    4.约束了浏览器应该以何种格式来接收服务器反馈的数据.
    在这里插入图片描述

  • HTTP1.0规范:
    若请求的有N个资源,得建立N次连接,发送N次请求,接收N次响应,关闭N次连接.
    每次请求的之间都要建立单独的连接,请求,响应,响应完关闭该次连接:
    缺点:每请求一个资源都要单独的建立新的连接,请求完并关闭连接.

  • HTTP1.1规范:
    能在一次连接之间,多次请求,多次响应,响应完之后再关闭连接.
    HTTP 1.1的特点
    在一个TCP连接上可以传送多个HTTP请求和响应
    多个请求和响应过程可以重叠进行
    增加了更多的请求头和响应头

  • HTTP协议的版本
    HTTP/1.0HTTP/1.1、HTTPS2.0
    在这里插入图片描述

请求信息

一个完整的由客户端发给服务器的HTTP请求中包含以下内容:

post请求会有请求体

  • 请求行
    包含了请求方法、请求资源路径、HTTP协议版本
    GET /MJServer/resources/images/1.jpg HTTP/1.1

  • 多个请求头
    包含了对客户端的环境描述、客户端请求的主机地址等信息

    • Accept:浏览器可接受的MIME类型(Tomcat安装目录/conf/web.xml中查找)注意: MIME: 表示文件内容的类型.
    • Accept-Charset:告知服务器,客户端支持哪种字符集
    • Accept-Encoding:浏览器能够进行解码的数据编码方式
    • Accept-Language:浏览器支持的语言。
    • Referer:当前页面由哪个页面访问过来的。
    • Content-Type:通知服务器,请求正文的MIME类型。
    • Content-Length:请求正文的长度
    • If-Modified-Since:通知服务器,缓存的文件的最后修改时间。
    • User-Agent:通知服务器,浏览器类型.
    • Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接)
    • Cookie:这是最重要的请求头信息之一(会话有关)
  • 请求体
    服务器返回给客户端的具体数据,比如文件数据.

在这里插入图片描述

响应信息

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端:

  • 状态行
    包含了HTTP协议版本、状态码、状态英文名称
    HTTP/1.1 200 OK

  • 多个响应头
    包含了对服务器的描述、对返回数据的描述

    • Location:制定转发的地址。需与302/307响应码一同使用
    • Server:告知客户端服务器使用的容器类型
    • Content-Encoding:告知客户端服务器发送的数据所采用的压缩格式
    • Content-Length:告知客户端正文的长度
    • Content-Type:告知客户端正文的MIME类型
      Conent-Type:text/html;charset=UTF-8
    • Refresh:定期刷新。还可以刷新到其他资源
      Refresh:3;URL=otherurl
      3秒后刷新到otherurl这个页面
    • Content-Disposition:指示客户端以下载的方式保存文件。
      Content-Disposition:attachment;filename=2.jpg
    • Expires:网页的有效时间。单位是毫秒(等于-1时表示页面立即过期)
      Cache-Control:no-cache
      Pragma:no-cache
      控制客户端不要缓存
    • Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话有关)
  • 实体内容

在这里插入图片描述

常见状态响应码

状态码英文名称中文描述
200OK请求成功
400Bad Request客户端请求的语法错误,服务器无法解析
404Not Found服务器无法根据客户端的请求找到资源
500Internal Server Error服务器内部错误,无法完成请求

GET请求和POST请求

一、简单说明
在HTTP/1.1协议中,定义了8种发送http请求的方法
GETPOST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议不同的方法对资源有不同的操作方式
- PUT :增
- DELETE :删
- POST:改
- GET:查

`提示:`最常用的是`GET和POST`(实际上GET和POST都能办到增删改查)

二、GET请求

  • 请求的数据全部在浏览器的地址栏(很不安全)
    http://localhost:8080/webapp/?username=coder&email=111#
  • 请求信息全部会存储在请求行
    注意:由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过2KB
  • 参数连接
    资源?参数名=参数值值&参数名=参数值&…

三、POST请求

  • 请求的数据不会出现在浏览器的地址栏中(比较安全)
  • 请求信息会全部存储到请求实体
GET和POST请求的区别:

一、两者区别

  • GET的请求数据在地址栏中,而POST不会
    POST比GET更安全
  • POST请求的参数存放于请求实体中, 而GET存放在请求行中.
  • GET请求的数据不能超过2K, 而POST没有上限
    文件上传时,必须使用POST方式
  • GET可以缓存, 而POST没有缓存

二、如何选择GET和POST

  • 如果要传递大量数据,比如文件上传,只能用POST请求
  • GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
  • 如果仅仅是索取数据(数据查询),建议使用GET
  • 如果是增加、修改、删除数据,建议使用POST

HTTP无状态连接

  • 一次会话
    打开一个浏览器,访问某一个站点,在该网址内部查看信息,点击超链接等相关操作,最后关闭浏览器的整个过程,称之为一次会话.

  • HTTP协议
    它是无状态连接,服务器不知道上一次是哪个客户端请求了自己.

  • 无状态连接带来的问题:
    在一次会话中,多个请求之间无法共享数据,无法跟踪用户的会话信息.
    在一次会话中共享数据即会话跟踪技术.

  • 解决方案

    • 使用参数的传递机制
      在每一个请求之间使用参数来传递需要共享的数据.http://localhost/param/list?username=gzy
      可以解决问题,但请求需要共享的数据全部暴露在URL中(请求行),不安全.想要解决这个问题,把共享的数据存放到请求头中. 期待Cookie技术
  • login.html
    在这里插入图片描述

  • LoginServlet
    在这里插入图片描述

  • ListServlet
    在这里插入图片描述

  • GetServlet
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white camel

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值