007 HTTP

文章目录

  • HTTP协议概述
    • 什么是HTTP协议
    • 什么是URL/URI
    • 什么是WEB资源
    • HTTP的作用是什么
  • HTTP协议版本
  • HTTP协议组成
    • 请求协议信息
      • 请求行
        • 请求方法
        • URI
        • 协议/版本
      • 请求头
      • 请求体
    • 响应协议信息
      • 状态行
        • 状态码说明
      • 响应头
      • 响应体
    • GET请求和POST请求的区别
      • 提交数据的方式不同
      • 使用场景不同
      • 传递参数的大小不同

HTTP协议概述

什么是HTTP协议

HTTP协议是建立在客户端和服务器之间的一个应用层协议,在客户端和服务器之间需要数据的传输,而传输数据的时候,我们要按照指定的规则或者叫协议去传输数据。

  • HTTP是建立在TCP/IP协议基础之上的一个网络协议。
  • HTTP协议属于网络七层结构中最上层(应用层)的协议。
  • HTTP协议是一个无状态协议(不会记录每次访问时的信息)
  • HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。

什么是URL/URI

  • URI:Uniform Resource Identifier,统一资源标识符。

它相当于一个网络资源的名称,只是名称的表现形式是/开头的路径形式。

  • URL:Uniform Resource Location,统一资源定位符。
  • URL和URI的区别:URL是URI的子集。

什么是WEB资源

通过浏览器可以访问到的所有资源都是 web资源 ,web资源分为静态资源和动态资源:

  • 动态资源是通过后台程序展示页面数据的,比如Servlet请求。
  • 静态资源的数据是不变的,比如HTML、JPG、AVI。

HTTP的作用是什么

就是为了约束客户端和服务器之间传输web资源时的格式。

HTTP协议版本

HTTP1.1和HTTP1.0版本之间最大的区别是:可以一个连接传输多个web资源。

HTTP协议组成

HTTP协议由两部分组成:请求协议信息和响应协议信息。

请求协议信息

  • 请求协议由哪几部分组成?
  • 请求协议的请求行包含哪些信息?
  • 请求协议的请求头如何理解?请求头中常用的一些配置的作用各自是什么?
  • MIME是什么?常见的MIME类型有哪些?
  • 请求协议的请求体有几种表现形式?

HTTP请求协议信息由三部分组成:请求行、请求头、请求体,简称行头体

请求行

也叫请求首行,它包含四部分(请求方法、URI、协议/版本、回车换行):
GET /user.html HTTP/1.1

请求方法

GET、POST等8种
互联网中WEB资源操作也有增删改查方法,它们分别是POST、DELETE、PUT和GET。

根据HTTP标准,HTTP请求可以使用多种请求方法
HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

序号方法描述
1GET请求指定的页面信息,并返回实体主体
2HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改
4PUT从客户端向服务器传送的数据取代指定的文档的内容
5DELETE请求服务器删除指定的页面
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7OPTIONS允许客户端查看服务器的性能
8TRACE回显服务器收到的请求,主要用于测试或诊断
URI

Uniform Resource Identifier,统一资源标识符。它相当于一个网络资源的名称,只是名称的表现形式
是/开头的路径形式。
URL:Uniform Resource Location,统一资源定位符
URL和URI的区别:URL是URI的子集。

协议/版本

表示这次请求是通过哪个协议发送的,比如HTTP协议、HTTPS协议等,使用的HTTP协议一般都是1.1版本的。

请求头

请求头的信息是以[key:value]形式展现的。
一般来说,大多数请求头的信息都不是必须的,我们只需要了解一些常见的请求头信息即可!

请求头说明:

ContentType是请求消息中非常重要的内容,表示请求正文中的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。
Host指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回
Accept浏览器可接受的MIME类型
Accept-Charset浏览器可接受的字符集
Accept-Encoding浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间
Accept-Language浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
Authorization授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
Connection表示是否需要持久连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小
Content-Length表示请求消息正文的长度
Cookie这是最重要的请求头信息之一,可以在客户端记录访问状态。
From请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它
If-Modified-Since只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答
Pragma指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝
Referer包含一个URL,用户从该URL代表的页面出发访问当前请求的页面,使用场景:防盗链、统计网站访问信息。
User-Agent浏览器类型(客户端类型),如果Servlet返回的内容与浏览器类型有关则该值非常有用
UA-Pixels,UA-Color,UA-OS,UA-CPU由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型
  • MIME概述:多用途互联网邮件扩展类型,也叫媒体类型。
  • MIME格式:大类型/小类型,阅读是反过来,比如text/html,读成html文本。
  • 常见MIME类型如下:

text/html: HTML格式
text/plain: 纯文本格式
text/xml: XML格式

image/gif: gif图片格式
imgae/jpeg: jpg图片格式
image/png: png图片格式

以application开头的媒体格式类型:
application/xhtml+xml: XHTML格式
application/xml: XML数据格式
application/atom+xml: Atom XML聚合格式
application/json: JSON数据格式
application/pdf: pdf格式
application/msword: Word文档格式
application/octet-stream: 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : <form encType=" " >中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data: 需要在表单中进行文件上传时,就需要使用该格式

请求体

也叫请求正文。

  • GET请求的请求体是空的,请求参数都是通过请求行传给服务器端。
  • POST请求的请求体可以承载数据,请求头和请求体之间有一个空行作为分割线。
  • 通过表单POST提交的请求体的表现形式主要有三种:
application/x-www-form-urlencoded在发送前编码所有字符(默认)
multipart/form-data不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
text/plain空格转换为"+"加号,但不对特殊字符编码
  • application/x-www-form-urlencoded:会对中文进行URL编码,并且多个参数以&连接,上传文件只能上传文件名称。
  • text/plain:纯文本方式,不会对中文进行URL编码,不会使用&连接多个key-value参数,上传文件只能上传文件名称。
  • multipart/form-data:多部件表现形式,这种方式主要可以完成文件上传,可以将上传的文件名称和文件内容都传递给服务器端。

总结

  • 请求行:请求方法 web资源URI http/1.1
  • 请求头:key value方式,不同的请求头配置会告诉服务器端不同的辅助信息。
  • 请求体:承载传输的具体数据,不过请求体中的数据表现形式有三种,这三种都是通过form表单的
    enctype属性来决定的。

响应协议信息

  • 响应协议由哪几部分组成?
  • 响应协议的状态行包含哪些信息?
  • 状态行中的状态码的含义分别是如何表示的?列出常见的几个状态码及说明?
  • 响应协议的响应头包含哪些头信息?
  • 响应协议的响应体如何理解?

响应协议由哪几部分组成?
响应协议信息,也由三部分组成:状态行、响应头、响应体(响应正文)。

状态行

HTTP/1.1 200 OK
状态行由协议/版本数字形式的状态码状态描述三部分组成。

状态码说明

状态码由三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx: 指示信息–表示请求已接收,继续处理
2xx: 成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法请求
常见的状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

响应头

响应头中的信息也是key value方式展现的。

Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容
LocationLocation响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务 器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在JSP中使用重定向语句的时候,服务器 端向客户端发回的响应报头中,就会有Location响应报头域。
ServerServer响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子Server:Apache-Coyote/1.1
WWW-AuthenticateWWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basicrealm=“Basic Auth Test!” 从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。
Content-Length表示响应消息正文的长度
ExpiresExpires实体报头域给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,我们可以使用Expires实体报头域指定页面过期的时 间。当用户又一次访问页面时,如果Expires报头域给出的日期和时间比Date普通报头域给出的日期和时间要早(或相同),那么代理服务器或浏览器就 不会再使用缓存的页面而是从服务器上请求更新的页面。不过要注意,即使页面过期了,也并不意味着服务器上的原始资源在此时间之前或之后发生了改变。
Last-ModifiedLast-Modified实体报头域用于指示资源最后的修改日期及时间。
Set-Cookie设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”,…),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
Allow服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept-Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

响应体

响应体,也叫响应正文,里面包含服务器发给客户端的web资源信息。
响应正文信息返回到浏览器时,浏览器需要根据响应头中Content-type设置的MIME类型来打开响应正文信息。

GET请求和POST请求的区别

提交数据的方式不同

GET是通过请求行提交请求参数的。
POST是通过请求体提交请求参数的。

使用场景不同

GET请求的目的是获取到数据,简单点说,就是客户端向服务器端要东西
POST请求的目的是给服务器提交数据。就是客户端向服务器端给东西。

传递参数的大小不同

GET请求是通过请求行中的请求URL传递给客户端的。HTTP协议对请求URL的长度没有限制,但是不同的
浏览器对请求URL长度是由限制的。
POST请求是通过请求体传递请求参数的。

总之POST传递的请求参数大小比GET方式要大,要多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/762591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作配置文件保存方式(上位机)

上位机:(Supervisor Control) 指的是用于监视和控制其他设备或者系统的计算机&#xff0c;在工业自动化和过程控制领域 上位机典型就是一台PC或者服务器&#xff0c;用于语各种下位机进行通信的&#xff0c;收集数据&#xff0c;并且根据收集的数据发送一些数据。 典型的设备…

一文讲懂npm link

前言 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 用法 包链接是一个两步过程&#xff1a; 1.为依赖项创建全局软链npm link。一个符号链接&#xff0c;简称软链&a…

为什么127.0.0.1和localhost之间算跨域?

原文&#xff1a;https://mp.weixin.qq.com/s/4zJBMNEntwjqAfN6A6diUA 什么是同源策略、跨域 跨域问题是指在浏览器中&#xff0c;当一个网页向不同域名、不同端口或不同协议的资源发起请求时&#xff0c;会受到限制。这是由浏览器的**同源策略&#xff08;Same-Origin Policy…

沉浸感拉满的三模游戏外设神器!谷粒金刚3 Pro游戏手柄开箱试玩

沉浸感拉满的三模游戏外设神器&#xff01;谷粒金刚3 Pro游戏手柄开箱试玩 哈喽小伙伴们好&#xff0c;我是Stark-C~ 对于喜欢打游戏的玩家来说&#xff0c;一款得力的游戏外设绝对是提升游戏体验&#xff0c;增加游戏乐趣的重要神器&#xff01;而在众多的外设中&#xff0c…

Redis基础教程(六):redis 哈希(Hash)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

tkinter实现进度条

tkinter实现进度条 效果代码解析导入需要的模块定义进度条 代码 效果 代码解析 导入需要的模块 import tkinter as tk from tkinter import ttk定义进度条 def start_progress():progress[value] 0max_value 100step 10for i in range(0, max_value, step):progress[valu…

基于大数据架构的情感分析

1 项目介绍 1.1 研究目的和意义 随着大数据时代的到来&#xff0c;电影产业积累了海量的用户评论数据&#xff0c;这些数据中蕴含着观众的情感倾向与偏好信息&#xff0c;为电影推荐和市场策略制定提供了宝贵资源。然而&#xff0c;如何高效地从这浩瀚的数据海洋中提炼出有价…

Linux高并发服务器开发(八)Socket和TCP

文章目录 1 IPV4套接字结构体2 TCP客户端函数 3 TCP服务器流程函数代码粘包 4 三次握手5 四次挥手6 滑动窗口 1 IPV4套接字结构体 2 TCP客户端 特点&#xff1a;出错重传 每次发送数据对方都会回ACK&#xff0c;可靠 tcp是打电话的模型&#xff0c;建立连接 使用连接 关闭连接…

论文阅读《U-KAN Makes Strong Backbone for MedicalImage Segmentation and Generation》

Abstract U-Net 已成为图像分割和扩散概率模型等各种视觉应用的基石。虽然通过结合transformer或 MLP&#xff0c;U-Net 已经引入了许多创新设计和改进&#xff0c;但仍然局限于线性建模模式&#xff0c;而且可解释性不足。为了应对这些挑战&#xff0c;我们的直觉受到了 Kolm…

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

WCCI 2024开幕,横滨圣地巡礼,畅游动漫与美食的世界

惊喜&#xff01;WCCI 2024开幕&#xff0c;横滨圣地巡礼&#xff01;畅游动漫与美食的世界 会议之眼 快讯 会议介绍 IEEE WCCI&#xff08;World Congress on Computational Intelligence&#xff09;2024&#xff0c;即2024年IEEE世界计算智能大会&#xff0c;于6月30日至…

力扣53. 最大子数组和(动态规划)

Problem: 53. 最大子数组和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义dp数组&#xff1a;dp[i]表示以nums[i]为结尾的子序列的最大子序列和&#xff1b; 2.状态初始化&#xff1a;dp[0] nums[0],表示以nums[0]为结尾的子序列的最大子序列和为nums[0]…

linux配置ssh免密登录

1、准备工作 操作系统版本&#xff1a;UnionTech OS Server 20 1050e 内核版本&#xff1a;Linux 4.19.90-2201.4.0.0135.up1.uel20.x86_64 x86_64 使用root用户分别修改每台机器的hosts&#xff0c;添加每台机器所对应的IP和主机名 vi /etc/hosts添加如下内容 172.16.100.1…

Redis-分布式锁(基本原理和不同实现方式对比)

文章目录 1、基本原理2、不同实现方式 1、基本原理 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&am…

生命在于学习——Python人工智能原理(3.1.1)

Python部分结束了&#xff0c;开始概率论部分 一、概率基本知识 1.1 事件与概率 1.1.1 事件的运算与关系 &#xff08;一&#xff09;基本概念 定义1 随机试验 如果一个试验满足如下条件&#xff1a; 在试验前不能断定其将发生什么结果&#xff0c;但可明确指出或说明试验…

Hugging Face发布重量级版本:Transformer 4.42

Hugging Face 宣布发布Transformer 4.42&#xff0c;该版本为流行的机器学习库带来了许多新功能和增强功能。此版本引入了几个高级模型&#xff0c;支持新工具和检索增强生成 &#xff08;RAG&#xff09;&#xff0c;提供 GGUF 微调&#xff0c;并整合了量化的 KV 缓存&#x…

可以显示余弦函数的自定义控件

序言 终于把坐标系变化怎么玩&#xff0c;搞清楚了。随手写一个余弦函数的自定义控件。只有70行。 代码 package com.example.myapplication;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pai…

【Emacs Verilog mode保姆级的使用指南】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

# [0701] Task05 策略梯度、Actor-critic 算法

easy-rl PDF版本 笔记整理 P4、P9 joyrl 比对 补充 P9 - P10 相关 代码 整理 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us…

深度学习 --- stanford cs231学习笔记八(训练神经网络之dropout)

6&#xff0c;dropout 6&#xff0c;1 线性分类器中的正则化 在线性分类器中&#xff0c;我们提到过正则化&#xff0c;其目的就是为了防止过度拟合。例如&#xff0c;当我们要用一条curve去拟合一些散点的数据时&#xff0c;常常是不希望训练出来的curve过所有的点&#xff0c…