HTTP主要解决什么问题
主要解决人与机器交流的问题,还需要解决www面对的问题
1、低门槛(使用者不太了解或者水平不高)
2、可扩展性(巨大的用户群体、超长寿命,需要根据需求一致迭代)
3、分布式系统下的hypermedia:大颗粒度的数据传输
4、internet规模:无法控制的scalability、独立的组件部署
5、向前兼容
HTTP请求报文:请求行、请求头、请求实体内容
请求行:method sp request-target(请求URL) sp HTTP-version CRLF
如图

method

request-target

HTTPversion

请求头:
Content-Type:
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/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 : 需要在表单中进行文件上传时,就需要使用该格式
https://www.runoob.com/http/http-content-type.html(其他类型详见菜鸟教程)
请求实体:
请求实体表示客户端传入的正文body,请求实体传入的数据与请求头有关,例如content-type指定请求body的类型,Content-Length为指定请求body的长度为固定长度,当不确定长度时,那么应该在请求头部中增加transfer-encoding可以忽略content-length,变成了不定长body
HTTP响应报文:状态行、响应头部、响应内容实体
状态行:http-version sp status-code Reason-Phrase(状态码的文本描述) sp CRLF
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599):

详细信息查看:https://www.runoob.com/http/http-status-codes.html
响应头部:
| 应答头 | 说明 |
|---|---|
| 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页面,为其他浏览器返回普通页面。 |
| Content-Length |
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。 |
| Content-Type |
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。 |
| Date |
当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 |
| Expires |
应该在什么时候认为文档已经过期,从而不再缓存它? |
| Last-Modified |
文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。 |
| Location |
表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 |
| Refresh |
表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 |
| Server |
服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 |
| Set-Cookie |
设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。 |
| WWW-Authenticate |
客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 |
响应内容实体:
响应实体表示服务返回的响应body。
参考链接:
https://www.runoob.com/http/http-header-fields.html
https://time.geekbang.org/course/intro/100026801
浙公网安备 33010602011771号