Fork me on GitHub

什么是HTTP?
超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议。
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。

GET 请求响应

GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取。
GET会方法请求指定的页面信息,并返回响应主体,GET被认为是不安全的方法,因为GET方法会被网络蜘蛛等任意的访问。
使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器:
/test/demoform.html?name1=value1&name2=value2
特点:
GET请求能够被缓存
GET请求会保存在浏览器的浏览记录中
以GET请求的URL能够保存为浏览器书签
GET请求有长度限制
GET请求主要用以获取数据

POST 发送数据给服务器处理

POST 发送数据给服务器处理,数据包含在HTTP信息正文中
POST请求会向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。
POST方法可能会创建新的资源或/和修改现有资源。
使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器:
POST /test/demoform.html HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
特点:
POST请求不能被缓存下来
POST请求不会保存在浏览器浏览记录中
以POST请求的URL无法保存为浏览器书签
POST请求没有长度限制

HEAD 与GET相同的响应,只要求响应表头

HEAD 与GET相同的响应,只要求响应表头
HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。
这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。

PUT 上传文件。

PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。

DELETE 删除文件

DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。
DELETE请求后指定资源会被删除,DELETE方法也是幂等的。

CONNECT 将HTTP请求的连接转换成透明的TCP/IP通道

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

TRACE 追踪收到的请求

TRACE请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。

OPTIONS 返回服务器所支持的HTTP请求的方法

OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 
这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用'*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。
JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限。 

这里还有一种架构风格:RESTful。REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。
规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:
<method> <request-URL> <version>
<headers>
<entity-body>
数据使用什么编码方式,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。

Form中常见的enctype 属性

application/x-www-form-urlencoded
浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。

multipart/form-data
浏览器的原生 <form> 表单,需要设置 enctype 属性,表单上传文件时,必须让 <form> 表单的 enctyped 等于 multipart/form-data。

Ajax中常见的Content-Type

application/json
用来告诉服务端消息主体是序列化后的 JSON 字符串。
JSON.stringify(str);//将JSON对象转化为JSON字符
JSON.parse(str); //由JSON字符串转换为JSON对象
JSON 对象 
var user = { "firstName":"Jason" , "lastName":"Hua" }
user.firstName //访问数据
JSON 数组 
var department = {
    "employees": [
        { "firstName":"Jason" , "lastName":"Hua" },
        { "firstName":"Jason" , "lastName":"Hua" }
        ],
    "department": "Dev"
}
department.employees[0].firstName //访问数据

Http  Content-Type对照表:http://tool.oschina.net/commons

posted on 2016-07-09 10:41  lingfeng95  阅读(29541)  评论(0编辑  收藏  举报