007 HTTP

文章目录

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方法

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容
5 DELETE 请求服务器删除指定的页面
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 允许客户端查看服务器的性能
8 TRACE 回显服务器收到的请求,主要用于测试或诊断
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来决定如何显示返回的消息体内容
Location Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务 器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在JSP中使用重定向语句的时候,服务器 端向客户端发回的响应报头中,就会有Location响应报头域。
Server Server响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子Server:Apache-Coyote/1.1
WWW-Authenticate WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basicrealm="Basic Auth Test!" 从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。
Content-Length 表示响应消息正文的长度
Expires Expires实体报头域给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,我们可以使用Expires实体报头域指定页面过期的时 间。当用户又一次访问页面时,如果Expires报头域给出的日期和时间比Date普通报头域给出的日期和时间要早(或相同),那么代理服务器或浏览器就 不会再使用缓存的页面而是从服务器上请求更新的页面。不过要注意,即使页面过期了,也并不意味着服务器上的原始资源在此时间之前或之后发生了改变。
Last-Modified Last-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方式要大,要多。

相关推荐
千天夜24 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
长弓三石1 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
xianwu5431 小时前
反向代理模块
linux·开发语言·网络·git
follycat1 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
earthzhang20212 小时前
《深入浅出HTTPS》读书笔记(5):随机数
网络协议·http·https
xiaoxiongip6662 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
JaneJiazhao2 小时前
HTTPSOK:SSL/TLS证书自动续期工具
服务器·网络协议·ssl
JaneJiazhao2 小时前
HTTPSOK:智能SSL证书管理的新选择
网络·网络协议·ssl
CXDNW2 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
无所谓จุ๊บ3 小时前
树莓派开发相关知识十 -小试服务器
服务器·网络·树莓派