HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。参见安全方法
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
向指定资源位置上传其最新内容。
请求服务器删除Request-URI所标识的资源。
回显服务器收到的请求,主要用于测试或诊断。
HTTP/1.1协议中预留给能够将连接改为渠道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
假如在不考虑诸如错误或者过期等问题的情况下,若干次请求的副作用与单次请求相同或者根本没有副作用,那么这些请求方法就能够被视作“幂等”的
PUT是幂等方法,POST不是。所以PUT用于更新、POST用于新增比较合适。
HTTP协议详解
HTTP状态码
持续连接-分块传输编码
put or post?
在使用http访问远程服务器前我们要先了解重点访问的步骤总的来说分为3点1.建立TCP连接(三步握手协议)第一次第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。2.发送HTTP协议HTTP协议的制定其中协议版本一般为 HTTP/1.x这里以HTTP/1.1为例他定义的请求方法一般有GET是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。POST用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:(1)对现有资源的解释(2)向电子公告栏、新闻组、邮件列表或类似讨论组发信息。(3)提交数据块(4)通过附加操作来扩展数据库HEAD向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。其他方法1.OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。2.PUT:向指定资源位置上传其最新内容。3.DELETE:请求服务器删除Request-URI所标识的资源。4.TRACE:回显服务器收到的请求,主要用于测试或诊断。5.CONNECT:回显服务器收到的请求,主要用于测试或诊断。URL代表的是网址下面谈论头部域名称头部域名称详解HostRFC协议规定所有的HTTP请求必须携带Host头,即使Host没有值,也必须带上这个Host头附加一个空串,如果不满足,应用服务器应该抛出400 Bad Request。协议虽然这样规定,不过大部分网关或者服务器都比较仁慈,既然没有指定Host字段,那就给你默认加上一个。网关代理可以根据不同的Host值转发到不同的upstream服务节点,它常用于虚拟主机服务业务。所以我们也需要用到Host我们选择请求方法为GET下面根据图中的请求方法制定协议,假设我们只访问百度的官网那么,他的协议可以这样定义GET / HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n3.发送连接请求,等待服务器响应在虚拟机中输入pingwww.baidu.com可以得到以下信息163.177.151.109就是服务器的地址在建立TCP通信的时候HTTP 服务器的默认端口为 : 80#include <stdio.h>#include <sys/types.h>/* See NOTES */#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>int main(){//1.创建网络通信对象int tcp_socket = socket(AF_INET, SOCK_STREAM, 0)if(tcp_socket <0){perror("")return -1}else{printf("tcp_socket creat ok\n")}//2.连接服务器struct sockaddr_in addraddr.sin_family = AF_INETaddr.sin_port = htons(80)addr.sin_addr.s_addr = inet_addr("163.177.151.109")//设置百度服务器的 IP地址信息int ret=connect(tcp_socket,(struct sockaddr *)&addr,sizeof(addr))if(ret == 0){printf("连接成功\n")}else{perror("")return -1}//HTTP 协议char *http = "GET / HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n"//协议的制定//发送请求给百度服务器ret=write(tcp_socket,http,strlen(http))printf("ret=%d\n",ret)while(1){//接收百度服务器的回应char buf[1024]={0}printf("等待服务器回应\n")read(tcp_socket,buf,1024)printf("%s\n",buf)}}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758591234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859执行上面代码返回200 ok说明访问服务器成功文章知识点与官方知识档案匹配欢迎分享,转载请注明来源:夏雨云
评论列表(0条)