HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式:
方法名称区分大小写。
- OPTIONS 用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项(Access-Control-Allow-*), 也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
如果没有响应正文,响应必须包含Content-Length,并且值为“0” - HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不用传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
- GET 向特定的资源发出请求。
- POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
- PUT 向指定资源位置上传其最新内容。
- DELETE 请求服务器删除Request-URI所标识的资源。
- TRACE 回显服务器收到的请求,主要用于测试或诊断。
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
ps.
当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);
当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
GET与POST区别
- GET: 安全性相对低
Query String Parameters ( Query String) 的方式, 将参数拼接在URL中, 因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系(HTTP协议规范也没有对URL长度进行限制,这个限制是特定的浏览器及服务器对它的限制。 eg. IE对URL长度的限制是2083字节(2K+35字节))。如果url太长,服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。 - POST: 安全性相对高
Request Payload (Request Body)提交; 理论上讲是没有数据大小限制, HTTP协议规范也没有进行限制,但实际上post所能传递的数据量大小取决于服务器的设置和内存大小。
GET产生一个TCP数据包;POST产生两个TCP数据包!
GET:浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST: 浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
中文乱码:
Post方式:在JSP中request解析数据时设置编码格式:request.setCharacterEncoding("utf-8"); 也可以使用Spring的CharacterEncodingFilter统一setCharacterEncoding。
<!-- characterEncodingFilter字符编码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!--要使用的字符集,一般我们使用UTF-8(保险起见UTF-8最好)-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!--是否强制设置request的编码为encoding,默认false,不建议更改-->
<param-name>forceRequestEncoding</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!--是否强制设置response的编码为encoding,建议设置为true-->
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<!--这里不能留空或者直接写 ' / ' ,否者不起作用-->
<url-pattern>/*</url-pattern>
</filter-mapping>
CharacterEncodingFilter:
private String encoding; //要使用的字符集,一般我们使用UTF-8(保险起见UTF-8最好)
private boolean forceRequestEncoding = false; //是否强制设置request的编码为encoding
private boolean forceResponseEncoding = false; //是否强制设置response的编码为encoding
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String encoding = getEncoding();
if (encoding != null) { //如果设置了encoding的值,则根据情况设置request和response的编码
//若设置request强制编码或request本身就没有设置编码则设置编码为encoding表示的值
if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
request.setCharacterEncoding(encoding);
}
//若设置response强制编码,则设置编码为encoding表示的值
if (isForceResponseEncoding()) {
response.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
}
Get方式: 对url编码encodeURI; 修改tomcat的配置server.xml <Connector> URIEncoding="UTF-8"。
<!-- windows -->
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
<Connector port="8099" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />