1.HTTP
1.1 常用错误码(必问)
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
状态码 | 描述 |
---|---|
200 | 请求成功 |
400 | 客户端请求的语法错误 |
401 | 未授权 |
404 | 请求的网页不存在 |
408 | 请求超时 |
414 | 请求的 URI 过长 |
500 | 服务内部异常 |
502 | 错误网关 |
503 | 服务器超时 |
1.2 HTTP请求响应报文组成(必问)
http请求报文组成: 1、请求行:一般由请求方法+url+http协议版本字段组成。 GET /data/info.html HTTP/1.1 (HTTP/1.0:一次连接只能执行一次请求和响应后就关闭了,没有HOST字段; HTTP/1.1 一次连接可以多次请求和响应,且必须要有HOST字段); 2、请求头:Accept、Accept-Encoding、Use-Agent、Content-Type、Content-Length(Post请求必有)、Host、if-modify-since、Cookie、Connection等组成; 3、空行:标志请求头结束; 4、请求数据:若方法字段是GET,则此项为空,没有数据;若方法字段是POST,则通常来说此处放置的就是要提交的数据。
POST方法请求报文如下,它的请求行URL段中一般是没有参数的,参数放在了报文体中。而GET方法的参数直接置于请求行URL中,报文体则为空。
HTTP响应报文: 1、响应行:包含http协议版本+状态码+描述 HTTP/1.1 200 OK; 2、响应头:描述服务器的基本信息:Allow(服务器支持哪些请求方法)、Content-Encoding(如果request.getHeader("Accept-Encoding")支持gzip,则返回gzip压缩后编码格式的文档)、Content-Type、Content-Length、Expires、Last-Modified(只有改动时间迟于指定时间(If-Modified-Since)的文档才会返回,否则返回一个304(Not Modified)状态)、Set-Cookie、Transfer-Encoding:告诉浏览器数据的传送格式、Date等; 3、空行:发送回车符+换行符,标志响应头的结束; 3、响应体:如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
HTTP协议解读:HTTP协议-HTTP响应报文 - 掘金
请求方法:
-
POST:用于传输实体的主题
-
GET:获取资源,请求访问已经被URI识别的资源
-
PUT:传输文件,自身不带验证机制,任何人都可以上传文件,存在安全性问题
-
DELETE:删除文件。同样不带验证机制,存在安全性问题。
请求头字段
-
Host
-
Accept:客户端支持接受响应类型
-
text/plain
-
text/csv
-
text/html
-
text/xml
-
application/javascript
-
application/json
-
application/zip
-
application/xml
-
multipart/form-data
-
image/xxx
-
-
Accept-Charset:请求编码
-
utf-8
-
-
Accept-Encoding
-
gzip
-
zip
-
-
Accept-Language:
-
Cookie:
jsessionid
-
Cache-Control:响应返回的内容在客户端是否被缓存
-
no-cache
-
-
Connection:
-
Last-Modified:
-
Content-Type:
-
Content-Lengh:
-
Date
请求头
-
请求方式+URI+协议版本
-
请求首部字段:
-
实体首部字段
-
其他
请求体
空行
请求数据
http 报文首部 | ProcessOn免费在线作图,在线流程图,在线思维导图
1.3 请求行的组成(必问)
请求方法+URL+协议版本
1.4 GET和POST的区别(必问)
GET | POST | |
---|---|---|
请求参数 | 多个参数以&连接<br />HTTP协议对URL长度没有限制,但是实际浏览器和服务器存在规范限制,建议最多1KB | 数据放在Body中<br />请求长度无限制 |
数据类型 | 只接受ASCII字符 | 无限制 |
参数位置 | 请求头 | 请求体 |
参数获取 | 请求可以携带Body,但是通过Body不能保证数据一定被接收到 | 无限制 |
安全性 | 提交的数据缓存在URL上,页面会被浏览器缓存<br />明文传输 | 请求不会缓存,除非手动设置<br />可明可密 |
数据传输 | 产生一个TCP数据包,将请求头和请求体一次性发送。等待响应 | 产生两个TCP数据包<br />发送请求头,获取响应<br />发送请求体,等待响应 |
1.4.1 关于HTTP请求URL长度的大小限制
服务器限制:
-
Nginx 的配置参数为
large_client_header_buffers
-
Tomcat 的请求配置参数为
maxHttpHeaderSize
浏览器限制:
-
IE浏览器对URL的长度现限制为2048字节。
-
360极速浏览器对URL的长度限制为2118字节。
-
Firefox(Browser)对URL的长度限制为65536字节。
-
Safari(Browser)对URL的长度限制为80000字节。
-
Opera(Browser)对URL的长度限制为190000字节。
-
Google(chrome)对URL的长度限制为8182字节。
1.4.2 使用场景
操作方式 | 数据位置 | 明文密文 | 数据安全 | 长度限制 | 应用场景 |
---|