http基础介绍 常用状态码 跨域介绍 multipart请求
- 2016-11-20 23:23:00
- admin
- 原创 3298
一、http基础介绍
1、官方文档:https://developer.mozilla.org/en-US/docs/Web/HTTP
2、状态码:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status
3、HTTP/1.X,当前版本超文本传输协议,可以使用HTTP和HTTPS;
4、HTTP/2.X,下一代超文本传输协议,只能使用HTTPS,速度更快,安全性更高;
5、RequestMapping注解不设置method属性表示支持任意请求方法;
6、org.springframework.http.HttpHeaders定义了请求头和返回头;
7、org.springframework.http.MediaType定义了常用内容类型;
8、后台动态生成网页推荐使用JSP或FreeMarker;
9、内容类型列表:mime-type.txt
常用内容类型:
Content-Type: text/html
Content-Type: text/plain
Content-Type: application/json
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Type: multipart/form-data
二、http常用状态码
200 请求成功;
400 请求出错,由于语法格式有误,服务器无法理解请求;
403 禁止访问,客户端无权访问服务器的某些页面;
404 找不到资源,服务器找不到请求的文件;
405 方法不允许,比如GET和POST不匹配;
429 客户端请求过于频繁,超过服务端允许的频率限制;
重定向状态码:
304 资源未修改,服务端不需要重传请求的资源;
301 永久移动,请求的资源被永久移动到新位置;
302 临时移动,客户端使用临时地址发起下一个请求;
307 临时移动,客户端保持method和body,使用临时地址发起下一个请求,HSTS使用此重定向;
5XX错误码:
500 Internal Server Error,内部服务器错误,可能是nginx出错,可能是tomcat出错;
501 Not Implemented,服务器不支持此请求方法,服务器支持此请求方法,对应资源不支持时返回405;
502 Bad Gateway,网关错误,网关从上游服务器收到错误响应,nginx一般是请求fail_timeout或queue已满;
503 Service Temporarily Unavailable,服务临时不可用,服务正在维护,或者访问量太大导致服务过载;
504 Gateway Time-out,网关超时,网关无法从上游服务器收到响应,nginx一般是上游处理时间太长;
三、跨域介绍
1、CORS,Cross-Origin Resource Sharing,跨域请求是JS在一个站点中请求另一个站点的资源;
2、静态链接和表单动作不属于跨域,跨域示例:crosssite.txt
3、OPTIONS请求可以判断服务是否支持跨域,返回200表示允许跨域,返回403表示不允许跨域;
4、服务允许跨域,客户端才能发起真正的GET和POST请求;
5、iframe可以发起跨域请求,但是无法获取浏览器cookie;
单点登录跨域登出方案:
1、应用后台实现logout;
2、logout失效当前会话;
3、应用后台重定向到单点登出;
OPTIONS请求:
OPTIONS /api/request HTTP/1.1
Host: 127.0.0.1:8080
Access-Control-Request-Method: GET
Access-Control-Request-Headers: Content-Type
Origin: http://www.other.com
OPTIONS返回:
HTTP/1.1 200
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: HEAD,DELETE,POST,GET,OPTIONS,PUT
Access-Control-Max-Age: 1800
Content-Length: 0
允许跨域:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
四、multipart请求
1、普通post请求,Content-Type: application/x-www-form-urlencoded
2、上传文件post请求,Content-Type: multipart/form-data; boundary=${bound}
3、示例代码下载:multipart-form-demo.py
请求代码片段:
def build_post_body(request, img_list):
boundary = '----WebKitFormBoundaryrGKCBY7qhFd3TrwA'
data = []
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'request')
data.append(request)
for img in img_list:
data.append('--%s' % boundary)
fd = open(img, 'rb')
data.append('Content-Disposition: form-data; name="%s"; filename="%s"'
% (img.split(os.sep)[-1], img.split(os.sep)[-1]))
data.append('Content-Type: %s\r\n' % 'image/jpeg')
data.append(fd.read())
fd.close()
data.append('--%s--\r\n' % boundary)
return boundary, '\r\n'.join(data)