所以我正在阅读这本名为Hacking:The Explo of Exploitation的书,我正在使用它的Tinyweb Server示例。
代码段如下:
fd = open(resource, O_RDONLY, 0); //Try to open file
printf("\tOpening \'%s\'\t",resource);
if(fd==-1){ //File not found
printf(" 404 Not found:\n");
send_string(sockfd, "HTTP/1.0 404 NOT FOUND\r\n");
send_string(sockfd, "Server: Tiny webserver\r\n\r\n");
send_string(sockfd, "<html><head><title>404 Not Found</title></head>");
send_string(sockfd, "<body><h1>URL not found</h1></body></html>\r\n");
} else { //Otherwise, serve up the file
...
那么,为什么在第二个send_string调用中需要额外的\ r \ n?没有它(比如说你取消注释整行),浏览器只会尝试无限加载。
我还注意到,如果取消注释前两个send_string调用,页面加载就好了。你也可以对此发表评论吗?
答案 0 :(得分:2)
HTTP响应的格式为:
你需要空白行来告诉标题结束和身体开始的位置。
答案 1 :(得分:1)
您需要两个\r\n
来告诉浏览器没有更多标题。 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields