一、面试题
1、HTTP/1.0和HTTP/1.1有什么区别?
参考:https://www.cnblogs.com/loren-Yang/p/7490011.html
https://pythonjishu.com/vuboqpkalikqgml/
长连接和管道机制:
- HTTP/1.0每次请求都需要重新建立连接,效率低
- HTTP/1.1支持长连接和管道化技术,即在同一个连接上可以发送多个请求,避免重复建立和断开连接的开销,提高了传输效率
Host字段:
- HTTP/1.0没有Host头字段(因此默认监听80端口)
- HTTP/1.1引入了Host头字段(用来区分同一个IP地址多个域名,如www.baidu1.com和www.baidu2.com共用111.111.111.111,那么通过Host指定特定的域名)
状态码:
- HTTP/1.1引入了新状态码100(Continue),用来确认服务端是否能收到请求(节约了带宽,因为如果不确定服务器是否能收到请求,那贸然发送带实体的请求,如果被拒绝就会浪费带宽,所以在正士请求前发送一个只带100Continue的请求)
方法:
- HTTP/1.0支持:GET、POST、HEAD
- HTTP/1.1新增:PUT、DELETE、OPTIONS、TRACE、CONNECT
2、http用哪几种方法?
- GET:请求指定的页面信息,并返回实体本体(暴露在地址栏URL中)
- POST:向指定资源提交要被处理的数据,并返回处理后的结果(一般用于提交表单等较隐私数据)
- PUT:更新指定资源
- DELETE:删除指定资源
- HEAD:类似GET请求,不过返回响应中没有具体的内容,用于获取资源的元信息
- OPTIONS:返回服务器支持的HTTP方法
- TRACE:回显服务器收到的请求,主要用于测试或诊断(可以回显当前请求头等信息,用于检查请求是否被修改)
- CONNECT:HTTP/1.1协议中预留能够将连接改为管道方式的代理服务器
3、http有哪些状态码?
- 1xx(信息性状态码):表示请求已被接受并继续处理
- 100(继续):表示服务器已经接收到请求头,并且客户端应该继续发送请求头(通常用于POST请求)
- 101(切换协议):…
- 2xx(成功状态码):表示请求已成功被服务器理解并接受
- 200(成功):表示请求已经成功,并且已返回请求的数据
- 201(已创建):表示请求已被服务器接受,并且资源已被创建
- 204(无内容):表示请求已经成功,但是没有返回任何内容
- 3xx(重定向状态码):表示需要客户端采取进一步操作才能完成请求
- 301(永久移动)
- 302(临时移动)
- 304(未修改):表示所请求的资源在上次访问之后没有被修改过,客户端可以使用缓存的版本
- 4xx(客户端错误状态码):表示客户端发送的请求错误
- 400(客户端错误请求):表示请求语法或参数有问题,服务器无法处理
- 401(未授权):表示请求需要身份验证
- 403(禁止访问):表示服务器拒绝请求
- 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误
- 500(服务器内部错误)
- 502(错误网关):表示服务器作为网关或代理,从上游服务器收到的响应无效
- 503(服务不可用):表示服务器暂时无法处理请求(可能是由于过载或维护等原因)
二、常见问题
1.参数值传yyyy-MM-dd报错(400)
解决方案:改成yyyy/MM/dd
2.参数值直接传json报错(400)
例子:{“id”:3,”name”:”gary”}
原因:Http Get和Post请求不能传包含{
、}
等这类特殊字符
解决方案:需要对特殊字符进行转义,如"
转成%22
,{
转成%7b
等
在线转义:http://www.jsons.cn/urlencode/