HTTP,HyperText Transfer Protocol,超文本传输协议。现在大家每天都跟它打交道,但是不一定对它很了解。
一、HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
标准的HTTP请求格式是这样的:
请求行:请求类型 访问资源 协议版本
请求头:key:value集合,用于描述请求的一些属性,比如主机,字符等
请求体:比如拼接的参数键值字符串
二、RESTFUL规范要求,获取数据用GET,添加数据用POST,修改数据用PUT,删除数据用DELETE。HEAD请求类似于GET,但是返回信息会把body丢弃掉只返回响应头信息。OPTIONS用户查看服务器性能。
现在很多服务器由于PUT请求不常用,对PUT请求的支持比较弱。如果在put请求中传参,只能通过拼接在URL后面这种方式,即get的方式。如果想用form表单的方式传参,把参数放在body中,服务器是不会处理的。
有三种解决方法:1)修改服务器配置,比如Tomcat中可以这样改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
parseBodyMethods="POST,PUT"
URIEncoding="UTF-8" />
2)使用spring提供的过滤器:
<filter>
<filter-name>httpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3)干脆将PUT请求改成POST请求。
三、HTTP的本质是TCP,不同之处在于,TCP是长连接,HTTP是一次性连接,一次请求完成后即关闭连接。现在出现的websocket技术,HTTP请求完成后不关闭连接,后续访问还是用这一个链接,减少握手次数,提高传输速率。HTTP页面加载时是先下载html文档(响应报头,状态码200),同时使用缓存;建立文档树,根据标记请求所需指定MIME类型的文件(比如css、js)。浏览器会限制单次请求同一服务器所访问的文件数,如果页面包含的css,js文件较多,浏览器会分批下载文件,这无疑会延长页面的响应时间。现在网站一般采用压缩合并文件,或者使用CDN,把文件放在不同的服务器上等策略,来提高页面响应速度。
四、未完待续。。